¿Por qué exportar vim como EDITOR en zsh deshabilita los atajos de teclado?

23

Mi .zshrcaspecto es este:

export EDITOR="/usr/bin/vim"

Ahora, cuando abro una terminal e ingreso un atajo de teclado ctrlapara ir al comienzo de la línea, no funciona. En cambio, la cadena ^A(o alguna otra cadena, dependiendo del acceso directo que ingresé) se ingresa al terminal:

emlai:~ % ^A

Al eliminar la palabra exportde mi, .zshrclos atajos de teclado funcionan correctamente:

EDITOR="/usr/bin/vim"

Exportar EDITORcomo algo más que vimhace que los atajos de teclado también funcionen, por ejemplo:

export EDITOR="/usr/bin/nano"

¿Por qué pasó esto?

También probé esto bash, y los atajos de teclado funcionan correctamente en todos los casos allí.

cenit
fuente

Respuestas:

27

zshcomo la mayoría de los shells modernos, puede elegir entre dos asignaciones de teclado diferentes para la edición de línea de comandos: viuno y emacsuno. En algunos shells (como los basados ​​en tcsho readlinecomo bash), emacsel predeterminado es el que probablemente se espera.

Con zsh, obtienes el emacsmodo por defecto a menos que $EDITORo $VISUALcontenga vi(si eres un vi/ nvi/ vim/ elvisusuario (aunque también vimacsy si $EDITORes ...), se supone que prefieres el modo)./home/victor/bin/emacszshvi

Para forzar un modo particular independientemente del valor de $EDITOR, agregue:

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

o su equivalente más portátil:

set -o emacs
set -o vi

a tu ~/.zshrc. Ver

info -f zsh -n Keymaps

para detalles.

Stéphane Chazelas
fuente
Interesante. ¿Hay alguna razón para usarbindkey más set -o?
cenit
@zenith, probablemente no. bindkeyes la forma tcsh y la forma original. Hoy en día deberían ser equivalentes.
Stéphane Chazelas