“set edit-mode vi”和“set -o vi”有什么区别?

“set edit-mode vi”和“set -o vi”有什么区别?

在多个论坛上,我都遇到过添加set -o vi到我的.bashrc文件的情况。今天我看到了添加set editing-mode vi到的选项.inputrc

我用谷歌搜索了一下,两者似乎都做了同样的事情,两者之间有什么关键区别吗?

答案1

.inputrc(和/etc/inputrc)是GNU库的配置文件readlinereadline与 bash 一起开发,目前均由 Chet Ramey 维护,但它也被许多其他 GNU 和非 GNU 应用程序使用,包括gdbpython3或 GNU bc...其他一些 shell 包括rc可以配置/构建以使用 readline 作为行编辑器,同时其他一些如 tcsh、ksh93、zsh 或 yash 有自己的通常更高级的行编辑器。

bash还支持通过命令更改其自己的行编辑器的 readline 设置bind。所以你也可以这样做:

bind 'set editing-mode vi'

set -o vi是 Korn shell 将行编辑器配置为使用vi-style 键绑定的方式。由于 POSIX 规范sh基于 Korn shell,因此这也是sh在那里配置键绑定的 POSIX 方式。

而且因为bash打算成为 POSIX 兼容的 shell,所以它还有一个vi选项集set -o(与 相对shopt)来将行编辑器模式更改为vistyle(或以 开头bashbash -o vi,最终会执行相同的操作。

请注意,它还bash从 csh 和 tcsh 中获得了很多功能。在 中tcsh,您可以使用 和 来切换键绑定的vi和样式。这也是支持的,但不是。emacsbindkey -vbindkey -ezshbash

答案2

这些.inputrc设置将在所有使用的应用程序中生效libreadline,包括但不限于bash.

set -o vi只会.bashrc影响bash

相关内容