Dlaczego eksportowanie vima jako EDITOR w zsh wyłącza skróty klawiaturowe?

23

Mój .zshrcwygląda tak:

export EDITOR="/usr/bin/vim"

Teraz, gdy otwieram terminal i wprowadzam skrót klawiaturowy, taki jak ctrlaprzejście na początek linii, to nie działa. Zamiast tego ciąg ^A(lub inny ciąg, w zależności od wprowadzonego skrótu) zostaje wprowadzony do terminala:

emlai:~ % ^A

Usunięcie słowa exportz mojego .zshrcpowoduje, że skróty klawiaturowe działają poprawnie:

EDITOR="/usr/bin/vim"

Eksportowanie EDITORjako coś innego niż vimsprawia, że ​​działają również skróty klawiaturowe, np .:

export EDITOR="/usr/bin/nano"

Dlaczego to się dzieje?

Przetestowałem to bashrównież, a skróty klawiaturowe działają poprawnie we wszystkich przypadkach.

zenit
źródło

Odpowiedzi:

27

zshpodobnie jak większość współczesnych powłok ma do wyboru dwa różne odwzorowania klawiatury do edycji w wierszu poleceń: vijeden i emacsjeden. W niektórych powłokach (takich jak tcshlub readlineopartych na takich jak bash), ta emacsjest domyślna i prawdopodobnie ta, której się spodziewasz.

Dzięki domyślnie zshdostajesz emacstryb, chyba że $EDITORlub $VISUALzawiera vi(jeśli jesteś użytkownikiem vi/ nvi/ vim/ elvis(choć także vimacsi jeśli $EDITORjest ...), zakładasz, że wolisz tryb)./home/victor/bin/emacszshvi

Aby wymusić określony tryb niezależnie od wartości $EDITOR, dodaj:

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

lub ich bardziej przenośny odpowiednik:

set -o emacs
set -o vi

do twojego ~/.zshrc. Widzieć

info -f zsh -n Keymaps

dla szczegółów.

Stéphane Chazelas
źródło
Ciekawy. Czy istnieje jakikolwiek powód, aby korzystać z bindkeyponad set -o?
zenith,
@zenith, prawdopodobnie nie. bindkeyto sposób tcsh i oryginalny sposób. W dzisiejszych czasach powinny być równoważne.
Stéphane Chazelas