为什么在 zsh 中将 vim 导出为 EDITOR 会禁用键盘快捷键?

zen*_*ith 25 vim keyboard-shortcuts zsh environment-variables

我的.zshrc看起来像这样:

export EDITOR="/usr/bin/vim"
Run Code Online (Sandbox Code Playgroud)

现在,当我打开终端并输入键盘快捷键(例如ctrla转到行首)时,它不起作用。相反,字符串^A(或其他一些字符串,取决于我输入的快捷方式)被输入到终端:

emlai:~ % ^A
Run Code Online (Sandbox Code Playgroud)

export从 my 中删除单词.zshrc会使键盘快捷键正常工作:

EDITOR="/usr/bin/vim"
Run Code Online (Sandbox Code Playgroud)

导出EDITOR为其他东西而不是vim使键盘快捷键也可以工作,例如:

export EDITOR="/usr/bin/nano"
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?

我也对此进行了测试bash,键盘快捷键在所有情况下都能正常工作。

Sté*_*las 28

zsh像大多数现代 shell 一样,可以在用于命令行编辑的两种不同键盘映射之间进行选择:vi一种和emacs一种。在某些 shell(如tcshreadline基于shell 的 shell bash)中,emacs一个是默认的,可能也是您期望的。

使用zshemacs默认情况下您将获得模式,除非$EDITOR$VISUAL包含vi(如果您是vi/ nvi/ vim/elvis用户(vimacs如果您$EDITOR也是……),则假定您更喜欢该模式)。/home/victor/bin/emacszshvi

无论 的值如何,要强制使用特定模式$EDITOR,请添加:

bindkey -e # for emacs
bindkey -v # for vi
Run Code Online (Sandbox Code Playgroud)

或者它们更便携的等价物:

set -o emacs
set -o vi
Run Code Online (Sandbox Code Playgroud)

到您的~/.zshrc. 看

info -f zsh -n Keymaps
Run Code Online (Sandbox Code Playgroud)

详情。