我如何找出是什么破坏了我的 zsh shell 行首和行尾绑定?

我如何找出是什么破坏了我的 zsh shell 行首和行尾绑定?

我在 macOS/darwin 上使用“默认设置”zsh 环境(没有“oh-my-zsh”或任何其他)。

我刚刚安装的一些开发工具显然破坏了我经常使用的一些按键绑定——emacs 风格的 control-a 和 control-e“行首”和“行尾”光标移动。当我输入 control-a 时,^A令牌会在提示符下插入。只有我在系统上的用户帐户受到影响 - 同一系统上的全新用户帐户不受影响,因为键盘快捷键无需任何其他配置即可使用。

比较受影响和未受影响的环境,输出bindkey有所不同。在里面做作的环境中,bindkey输出 49 行,但在不受影响环境,bindkey输出120行。在我看来,这显然是问题的根源,但不是根本原因。

进一步调查:在受影响的 shell 上,$ bindkey -lL返回:

bindkey -N command
bindkey -N emacs
bindkey -N isearch
bindkey -A viins main
bindkey -N vicmd
bindkey -N viins
bindkey -N viopp
bindkey -N visual

在不受影响的 shell 上,这是相同的,除了第 4 行是:

bindkey -A emacs main

这似乎与我所看到的行为有意义——我期望的 emacs 风格的绑定已被不同风格的绑定所取代。

我仍然不知道 bindkey 是如何工作的,所以我很好奇它是否在系统上的某个位置有我可以检查的状态,或者这是否是由于 shell 初始化文件而发生的。后者会令人困惑,因为我只知道~/.zshenv并且~/.zshrc在我的用户配置文件中只会影响我的 shell 上下文,并且我相信我已经对此进行了控制。 (有没有办法列出加载 shell 时获取的所有初始化文件?)

最终,我想找出导致此行为的原因,因此我可以向我安装的导致问题的开发人员工具提交错误报告。

答案1

bindkey -A … main定义main键盘映射是什么。这main 键位图是编辑器每次开始编辑一行时使用的。所以改变的是主键盘映射现在是viins而不是emacs.基本上,zsh 现在默认使用 Vi 编辑模式,而不是 Emacs 编辑模式。

除非在您的 中被覆盖.zshrc,否则如果 zsh 认为您最喜欢的编辑器是 Vi,则默认为 Vi 编辑模式,否则默认为 Emacs 编辑模式。更准确地说,“它认为你最喜欢的编辑器是 Vi”被定义为

VISUAL如果或环境变量之一EDITOR包含字符串 ' vi'

现在似乎有什么东西正在设置这些变量中的一个或两个。要解决该问题:

  • 如果您确实希望名称中带有 的编辑器vi成为您的默认编辑器,请添加bindkey -e(或bindkey -A emacs main) 来.zshrc告诉 zsh 无论它怎么想,您更喜欢 zsh 中的 Emacs 编辑模式。
  • 如果您不需要默认编辑器,请找出环境变量的设置位置并删除此设置。

答案2

看来您安装的工具将您的main键盘映射从更改emacsviins(通过执行bindkey -v)。要更改main回默认值emacs,请执行以下操作

bindkey -e

相关内容