Почему экспорт vim как редактора в zsh отключает сочетания клавиш?

23

Моя .zshrcвыглядит так:

export EDITOR="/usr/bin/vim"

Теперь, когда я открываю терминал и ввожу комбинацию клавиш, например, ctrlaчтобы перейти к началу строки, она не работает. Вместо этого строка ^A(или другая строка, в зависимости от введенного мной ярлыка) вводится в терминал:

emlai:~ % ^A

Удаление слова exportиз моего .zshrcзаставляет сочетания клавиш работать должным образом:

EDITOR="/usr/bin/vim"

Экспорт EDITORкак нечто иное, чем vimзаставляет работать сочетания клавиш, например:

export EDITOR="/usr/bin/nano"

Почему это происходит?

Я также проверил это bash, и сочетания клавиш работают должным образом во всех случаях там.

зенит
источник

Ответы:

27

zshКак и в большинстве современных оболочек, для редактирования в командной строке можно выбирать между двумя различными отображениями клавиатуры: viодним и emacsодним. В некоторых оболочках (например, tcshили на readlineоснове bash), emacsпо умолчанию используется тот, который вы ожидаете.

С zsh, вы получаете emacsрежим по умолчанию , если $EDITORили $VISUALсодержит vi(если вы vi/ nvi/ vim/ elvisпользователь (хотя также vimacsи если $EDITORесть ...), предполагает , что вы предпочитаете режим)./home/victor/bin/emacszshvi

Чтобы $EDITORвключить конкретный режим независимо от значения , добавьте:

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

или их более переносимый эквивалент:

set -o emacs
set -o vi

к вашему ~/.zshrc. Видеть

info -f zsh -n Keymaps

для деталей.

Стефан Шазелас
источник
Интересный. Есть ли причина использовать bindkeyболее set -o?
Зенит
@zenith, вероятно нет. bindkeyэто путь tcsh и оригинальный путь. В наше время они должны быть эквивалентны.
Стефан Шазелас