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.

Murali Suriar
źródło

Odpowiedzi:

36

Zobacz edit-command-linew zshcontrib.

bindkey -M vicmd v edit-command-line
efemeryczny
źródło
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
Daniel Serodio
źródło
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.

Christoph Wurm
źródło
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
Matt Hughes
źródło
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