Por que exportar o vim como EDITOR no zsh desativa os atalhos de teclado?

23

Minha .zshrcaparência é assim:

export EDITOR="/usr/bin/vim"

Agora, quando abro um terminal e digito um atalho de teclado como ctrlapara ir para o início da linha, ele não funciona. Em vez disso, a string ^A(ou alguma outra string, dependendo do atalho que eu inseri) é inserida no terminal:

emlai:~ % ^A

A remoção da palavra exportdo meu .zshrcfaz com que os atalhos do teclado funcionem corretamente:

EDITOR="/usr/bin/vim"

Exportar EDITORcomo algo além de vimfazer com que os atalhos do teclado também funcionem, por exemplo:

export EDITOR="/usr/bin/nano"

Por que isso acontece?

Eu testei isso bashtambém, e os atalhos do teclado funcionam corretamente em todos os casos.

zênite
fonte

Respostas:

27

zshcomo a maioria dos shells modernos, há uma escolha entre dois mapeamentos de teclado diferentes para edição na linha de comando: vium e emacsoutro. Em alguns shells (como os baseados em tcshou readlinecomo bash), emacsesse é o padrão e provavelmente o que você espera.

Com zsh, você começa emacso modo por padrão, a menos que $EDITORou $VISUALcontém vi(se você é um vi/ nvi/ vim/ elvisutilizador (embora também vimacse se $EDITORé ...), assume que você preferir o modo)./home/victor/bin/emacszshvi

Para forçar um modo específico, independentemente do valor de $EDITOR, adicione:

bindkey -e # for emacs
bindkey -v # for vi

ou seu equivalente mais portátil:

set -o emacs
set -o vi

para o seu ~/.zshrc. Vejo

info -f zsh -n Keymaps

para detalhes.

Stéphane Chazelas
fonte
Interessante. Existe algum motivo para usar bindkeymais set -o?
Zenith
@zenith, provavelmente não. bindkeyé a maneira tcsh e a maneira original. Hoje eles devem ser equivalentes.
Stéphane Chazelas