`set -o emacs` 与 `bindkey -e` 有什么区别?

`set -o emacs` 与 `bindkey -e` 有什么区别?

据我所知,set -o emacsbindkey -e都用于修改终端行编辑器的行为以模拟emacs,而set -o vi和 则bindkey -v用于模拟vi键绑定。由于两者set -o似乎bindkey都做同样的事情,我想知道两者之间有什么区别以及是否有任何区别。

它似乎set -o适用于大多数 shell,而bindkey是一个zle特定的命令。这是唯一的区别吗?另外,它们是否绑定相同的键,或者是否有一些键set -o绑定bindkey到不同的操作?

答案1

bindkey -v/-etcsh语法(bindkey1990 年 5.19PL2 中的 tcsh 中添加了内置函数),而set -o vi/emacs是 ksh 语法(ksh85 中已经存在,可能更早,因为 ksh 至少早在 1983 年就有 emacs/vi 模式)。

在1991zshbindkey2.0 中添加了 zle 的第一个版本(1.0 之前的版本借用了readlinebash

zsh,因为第一个 1.0 版本必须setopt设置选项(除了在csh/Bourne 中通过命令行传递的选项之外),而(t)csh和 则bash使用特殊变量。在 2.0 中,添加了一个-o选项(解释器和内置选项)以与(本身将其特殊变量转换为1996 年 2.0 中新内置选项设置的选项;这是一组与那里设置的选项分开的选项;大约在 1990 年添加了支持)。setkshbashshoptset -oset -o

和“选项viemacs不是2003 年之前添加到 zsh不过在 4.1.1 版本中。 “选项”范例不太适合这种情况,因为当您设置选项时emacs,它会禁用该vi模式。

您会注意到,zsh -o emacs目前在zsh -o vizsh 启动时报告中无法正常工作zsh: invalid module name `zsh/zle'(a漏洞)。

大多数 shell 还根据和环境变量zsh的值选择默认编辑模式,以尝试将行编辑模式与用户的编辑器首选项相匹配。$EDITOR$VISUAL

相关内容