Używam zsh i, ponieważ jestem zapalonym użytkownikiem Vima, właśnie przełączyłem się na edycję w stylu Vima w wierszu poleceń. (Oznacza to, że jeśli piszę ls foo/bar
i zdecyduję, że chcę, cd
zamiast tego, mogę uderzyć, Esc ^
aby przejść z powrotem do początku i cw cd
przejść ls
na cd
.
To wszystko dandys, ale problem polega na tym, że nie mogę już używać Ctrl+R
rekurencyjnego przeszukiwania historii. Czy istnieje inny sposób, aby to zrobić, czy mogę w jakiś sposób ominąć klawisze Vima, aby je odzyskać?
garyjohn
pokazuje sposób Vima, jak to zrobić iJdeBP
pokazuje, jak odzyskać skrót klawiszowy dla Ctrl + R z powrotem! Będę grać obiema metodami i przyjmuję odpowiedź później. Zdecyduję na podstawie 1), która metoda wydaje mi się łatwiejsza, i 2) która zyskuje więcej głosów pozytywnych. Dziękuję wam obu!Odpowiedzi:
Oczywiście nie możesz już używać Ctrl+ R. Jeśli zajrzysz do instrukcji Z Shell, zobaczysz, że
history-incremental-search-backward
widżet wemacs
mapie klawiszy zawiera tylko przypisanie klawiszy . W mapach klawiszy vi nie ma dla niego żadnych powiązań klawiszy.Ale jak można również przeczytać w podręczniku (rozdział 18.), dodanie powiązania klawiszy jest dość prostym ćwiczeniem w użyciu
bindkey
polecenia:Nie musisz nawet używać
zle
polecenia do mapowania widgetu na funkcję powłoki, ponieważ jest to standardowy widget.Jeśli przejrzysz odpowiedź na to samo pytanie, które znajduje się na wiki Z Shell , zobaczysz polecenia do specjalnego dodania tego do mapowania klawiszy „polecenie” i „tryb wstawiania” vi:
Zwróć też uwagę, że jak wskazuje garyjohn , w mapie klawiszy vi „polecenia” /postać jest powiązana z
vi-history-search-backward
widżetem. Różnica między tym widżetem ahistory-incremental-search-backward
widżetem polega na tym, że zachowanie widżetu ma zastosowanie, gdy jest się w trybie wyszukiwania historii. Oto kilka różnic, które zauważysz:history-incremental-search-backward
przełącza między mapami klawiszymain
avicmd
mapami klawiszy, gdy wywołujeszvi-cmd-mode
widget, pozostając w trybie wyszukiwania. tzn. wemacs
trybie naciśnięcie Escklawisza lub Ctrl+ XCtrl+ Vprzełącza tryb wyszukiwania między mapami klawiszyemacs
ivicmd
. (Wywoływaniehistory-incremental-search-backward
zvicmd
mapy klawiszy jest więc kłopotliwe, chyba że coś wiążesz równieżvi-cmd-mode
zvicmd
mapą klawiszy).vi-history-search-backward
traktujevi-cmd-mode
widżet jakoaccept-line
i zakończy wyszukiwanie, ponownie wchodząc w tryb poleceń, z którego wprowadzono wyszukiwanie. tj. (z domyślnymi powiązaniami) /wchodzi w tryb wyszukiwania z trybu poleceń i Escwraca do trybu poleceń.history-incremental-search-backward
zarówno widżety , jakhistory-incremental-search-backward
ivi-rev-repeat-search
widżety są rozpoznawane. tzn. (zakładając, że zmieniłeś powiązania jak wyżej) zarówno Ctrl+ Ri Nbędą szukać poprzedniej pasującej linii.vi-history-search-backward
, tylkovi-rev-repeat-search
widżet jest rozpoznawany. tzn. (zakładając, że zmieniłeś powiązania jak wyżej) Ctrl+ Rwygeneruje sygnał dźwiękowy i zostanie zignorowany.źródło
W trybie vi basha pisanie
<Esc>/<string><Enter>
przeszuka historię poleceń<string>
.n
będzie szukać dalej w historii;N
będzie szukać do przodu. Zshell może być taki sam.źródło
Wolę używać:
W ten sposób mogę wpisać
ESC /text
i zobaczyć wiersz poleceń. Jeśli chcę przejść do następnego meczu, piszęESC n
źródło