Naprawdę podoba mi się ogólna prędkość Zsh, ale dwie rzeczy mnie denerwują.
- Muszę poczekać chwilę między uderzeniem w ucieczkę a uderzeniem w ukośnik, aby przejść do wyszukiwania historii (jeśli uderzy zbyt szybko, napisane jest
zsh: do you wish to see all 514 possibilities (172 lines)
) - Po wejściu w tryb wstawiania z powodu uderzenia
a
lubA
nie mogę cofnąć się do miejsca, w którym wszedłem w tryb wstawiania.
Wiem, że 2 jest jak klasyczna vi, ale bardziej podoba mi się styl vim.
command-line
zsh
Chas. Owens
źródło
źródło
i
dwukrotnego naciśnięcia przycisku, aby wrócić do trybu wstawiania, zdecydowanie polecam tę poprawkę!Odpowiedzi:
(1). Z jakiegoś powodu bindkey zachowuje się dziwnie, jeśli chodzi o „/”:
<esc>
po którym następuje szybkie/
interpretowanie jako<esc-/>
. (Obserwowałem to zachowanie innego dnia; nie jestem do końca pewien, co je powoduje). Nie wiem, czy to błąd, czy funkcja, a jeśli jest to funkcja, jeśli można ją wyłączyć, ale można dość łatwo obejść ten problem .Ta kombinacja klawiszy prawdopodobnie jest związana
_history-complete-older
, co generuje niepożądany wynik - możesz użyć,bindkey -L
aby sprawdzić, czy tak jest.W każdym razie, jeśli nie masz nic przeciwko poświęceniu rzeczywistego
<esc-/>
(wciśniętego razem, jako akordu) wiązania, możesz ponownie powiązać je z poleceniem wyszukiwania historii w trybie vi, aby pisanie<esc>
poprzedzone działało/
tak samo przy każdym pisaniu prędkość. =)Ponieważ będzie to traktowane jako akord, nie będzie miało wpływu na wejście w tryb komend vi, więc musimy upewnić się, że to się stanie najpierw. Najpierw musisz zdefiniować funkcję; umieść go gdzieś w swoim,
fpath
jeśli go używasz, lub umieść go w .zshrc w przeciwnym razie:Reszta idzie w twoim .zshrc w obu kierunkach:
Powinno być dobrze.
(2). Możesz naprawić klawisz Backspace w następujący sposób:
Ponadto, jeśli chcesz mieć podobne zachowanie dla innych poleceń w stylu vi:
źródło
^[/
nie\e/
, ale te są zarówno ważne sposoby mówiąc ucieczki. Zmiana działa idealnie. Teraz, gdy gram z tym bardziej kompletnie, wygląda na to, że tryb vi zsh jest do bani w porównaniu do basha (lub przynajmniej nie jest w pełni skonfigurowany domyślnie). Jednym z przykładów jest to, że po historii wyszukiwania powoduje przejście do trybu wstawiania. Muszę wrócić do trybu poleceń, aby nacisnąć n, aby znaleźć następny szukany element..vi-history-search-backward
. Napiszę i zredaguję swoją odpowiedź - sprawdź później.bindkey | grep <searchterm>
dla któregokolwiek z terminów, wszystkie są poprzedzone przezvi-
. Czy muszę skonfigurowaćbindkey
polecenia, które nie mają przedrostkavi-
?Zajmę się tylko pytaniem (1).
Twój problem to KEYTIMEOUT. Cytuję z zshzle (1):
Te 0,4 s to opóźnienie występujące po uderzeniu w ESC. Rozwiązaniem jest ustawienie KEYTIMEOUT aż do 0,01 s w jednym z plików startowych powłoki:
Niestety ma to efekt domina: inne rzeczy zaczynają się dziać źle…
Po pierwsze, występuje teraz problem w trybie komend vi: Wpisanie ESC powoduje zawieszenie się kursora, a następnie którykolwiek z wpisanych znaków zostanie połknięty. Wynika to z faktu, że ESC nie jest domyślnie powiązany z niczym w trybie komend vi, ale istnieją widżety wieloznakowe, które zaczynają się od ESC (klawisze kursora!). Więc kiedy wciśniesz ESC, ZLE czeka na następną postać… a następnie ją pochłania.
Rozwiązaniem jest powiązanie ESC z czymś w trybie poleceń, co zapewnia, że coś zostanie przekazane do ZLE po centisekundach $ KEYTIMEOUT. Teraz możemy utrzymywać wiązania zaczynające się od ESC w trybie poleceń bez tych złych efektów. Wiążę ESC z postacią dzwonka, co wydaje mi się mniej inwazyjne niż samodzielne wstawianie (a moja skorupa jest wyciszona):
Następny problem: Domyślnie istnieją dwa widżety z dwoma kluczami, zaczynające się od ^ X w trybie wstawiania vi; stają się one bezużyteczne, jeśli $ KEYTIMEOUT jest ustawiony do końca. To, co robię, to unbindowanie ^ X w trybie wstawiania vi (domyślnie jest to automatyczne wstawianie); pozwala to dwóm kluczowym widżetom kontynuować pracę.
Tracisz wiązanie do samodzielnego wstawiania, ale możesz oczywiście powiązać je z czymś innym. (Nie mam, bo nie mam z tego pożytku.)
Ostatni problem (do tej pory znalazłem): Są pewne domyślne skróty klawiszowe, które „tracimy” z powodu ustawienia $ KEYTIMEOUT w dół, to znaczy: te zaczynające się od ESC w trybie wstawiania vi, które nie są klawiszami kursora. Osobiście wiążę je ponownie, aby zacząć od ^ X:
źródło