Warum deaktiviert das Exportieren von vim als EDITOR in zsh Tastaturkürzel?

23

Mein .zshrcsieht so aus:

export EDITOR="/usr/bin/vim"

Wenn ich jetzt ein Terminal öffne und ein Tastenkürzel eingebe ctrla, um zum Zeilenanfang zu gelangen, funktioniert es nicht. Stattdessen wird die Zeichenfolge ^A(oder eine andere Zeichenfolge, abhängig von der eingegebenen Verknüpfung) in das Terminal eingegeben:

emlai:~ % ^A

Wenn Sie das Wort exportaus meiner entfernen, .zshrcfunktionieren die Tastaturkürzel ordnungsgemäß:

EDITOR="/usr/bin/vim"

Exportieren EDITORals etwas anderes als vimdie Tastenkombinationen funktionieren zu machen, zum Beispiel:

export EDITOR="/usr/bin/nano"

Warum passiert das?

Ich habe dies auch mit getestet bashund die Tastaturkürzel funktionieren dort in allen Fällen einwandfrei.

Zenit
quelle

Antworten:

27

zshWie die meisten modernen Shells haben Sie die Wahl zwischen zwei verschiedenen Tastaturzuordnungen für die Befehlszeilenbearbeitung: eine viEins und eine emacsEins. In einigen Shells (wie tcshoder readline-basierten wie bash) emacsist der Standard und wahrscheinlich der, den Sie erwarten.

Mit zsherhalten Sie emacsModus standardmäßig , es sei denn $EDITORoder $VISUALenthält vi(wenn Sie ein vi/ nvi/ vim/ elvisBenutzer (obwohl auch vimacsund wenn $EDITORist ...), vorausgesetzt , dass Sie das bevorzugen Modus)./home/victor/bin/emacszshvi

Um einen bestimmten Modus unabhängig vom Wert von zu erzwingen $EDITOR, fügen Sie Folgendes hinzu:

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

oder ihr tragbareres Äquivalent:

set -o emacs
set -o vi

zu deinem ~/.zshrc. Sehen

info -f zsh -n Keymaps

für Details.

Stéphane Chazelas
quelle
Interessant. Gibt es einen Grund zu verwenden , bindkeyüber set -o?
Zenit
@zenith wahrscheinlich nicht. bindkeyist der tcsh Weg und der originelle Weg. Heutzutage sollten sie gleichwertig sein.
Stéphane Chazelas