Jak edytować wiersz poleceń w edytorze pełnoekranowym w ZSH?


52

W bashu, używając trybu vi, jeśli uderzę Esc, vmój bieżący wiersz poleceń jest otwierany w edytorze określonym przez $EDITORi jestem w stanie edytować go na pełnym ekranie przed „zapisaniem” polecenia, które ma zostać zwrócone do powłoki i wykonane.

Jak mogę osiągnąć podobne zachowanie w Zsh? Uderzenie vw trybie komend powoduje dzwonek i nie ma widocznego efektu, pomimo ustawienia EDITORzmiennej środowiskowej.

Odpowiedzi:


36

Zobacz edit-command-linew zshcontrib.

bindkey -M vicmd v edit-command-line

13
(Tylko dla wyjaśnienia): Aby włączyć edit-command-line„widget”, potrzebujesz czegoś takiego jak autoload edit-command-line; zle -N edit-command-linew jednym z plików inicjujących zsh (zobacz sekcję Funkcje ZLE w zshcontribdokumentacji ).
Chris Johnsen

Jak to aktywować, gdy jest na miejscu? Klucz do klucza w odpowiedzi w stylu emacsa ma dla mnie sens. Ale nie mogę znaleźć odniesienia do tego, co bindkey -M vicmd vsię konfiguruje.
Mat Schaffer

@MatSchaffer Taki sam jak Bash: jeśli jesteś w trybie vi, następnie naciśnij, <ESC>aby przejść do trybu poleceń z trybu wstawiania, a następnie vdo trybu wizualnego ( Meta-vjest taki sam) lub po prostu, vjeśli jesteś już w trybie poleceń. Jeśli używasz trybu Emacsa, typowe wiązanie to C-x C-e.
ephemient

1
Ponowne mapowanie klawisza v oznacza, że ​​nie można już korzystać z trybu wizualnego, więc wolę mapować ponownie spację (która nie robi nic użytecznego w trybie normalnym) za pomocąbindkey -M vicmd ' ' edit-command-line
gib

37

Jeśli wolisz skróty klawiszowe Emacsa:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line

9
^x^eWiązanie wydaje się być domyślną z obecnej .oh-my-zsh , który jest bardzo miły.
quodlibetor

^ x ^ e jest dokładnie tym, czego szukałem.
jmreicha

1
Podobne ustawienia dla Prezto, o ile editormoduł jest załadowany.
AL the X

23

Możesz użyć fcdo edycji ostatniego polecenia w historii. To nie to samo, co edycja tego samego polecenia, ale szybkie naciśnięcie klawisza Enter sprawia, że ​​bieżące polecenie jest ostatnim poleceniem w historii.


14

Oto pełna konfiguracja, którą dodałem do mojej, ~/.zshrcaby uzyskać to samo zachowanie z bash:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line

Zgodnie z wcześniejszymi komentarzami jest to domyślnie skonfigurowane, jeśli używasz Oh my ZSH lub Prezto . Ten ostatni wymaga, aby editormoduł został załadowany i / vilub vimwybrany do trybu poleceń.
AL the X

Głosowałbym, aby uczynić to zaakceptowaną odpowiedzią, rozwiązało to moje pytanie z opisaną konfiguracją. Dzięki.
Laurent
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.