Pourquoi l'exportation de vim en tant qu'EDITEUR dans zsh désactive les raccourcis clavier?

23

Mon .zshrcressemble à ceci:

export EDITOR="/usr/bin/vim"

Maintenant, lorsque j'ouvre un terminal et que j'entre un raccourci clavier comme ctrlapour aller au début de la ligne, cela ne fonctionne pas. Au lieu de cela, la chaîne ^A(ou une autre chaîne, selon le raccourci que j'ai entré) est entrée dans le terminal:

emlai:~ % ^A

Supprimer le mot exportde mon .zshrcfait que les raccourcis clavier fonctionnent correctement:

EDITOR="/usr/bin/vim"

L'exportation EDITORcomme autre chose que vimles raccourcis clavier fonctionne également, par exemple:

export EDITOR="/usr/bin/nano"

Pourquoi cela arrive-t-il?

J'ai également testé cela avec bash, et les raccourcis clavier fonctionnent correctement dans tous les cas.

zénith
la source

Réponses:

27

zshcomme la plupart des shells modernes, vous avez le choix entre deux mappages de clavier différents pour l'édition en ligne de commande: un viet un emacs. Dans certains shells (comme ceux basés sur tcshou readlinesimilaires bash), celui- emacsci est celui par défaut et probablement celui que vous attendez.

Avec zsh, vous obtenez le emacsmode par défaut sauf si $EDITORou $VISUALcontient vi(si vous êtes un utilisateur vi/ nvi/ vim/ elvis(mais aussi vimacset si $EDITORc'est ...), suppose que vous préférez le mode)./home/victor/bin/emacszshvi

Pour forcer un mode particulier quelle que soit la valeur de $EDITOR, ajoutez:

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

ou leur équivalent plus portable:

set -o emacs
set -o vi

à votre ~/.zshrc. Voir

info -f zsh -n Keymaps

pour plus de détails.

Stéphane Chazelas
la source
Intéressant. Y a-t-il une raison d'utiliser bindkeyplus set -o?
zénith du
@zenith, probablement pas. bindkeyest la voie tcsh et la voie originale. De nos jours, ils devraient être équivalents.
Stéphane Chazelas