在多个论坛上,我都遇到过添加set -o vi
到我的.bashrc
文件的情况。今天我看到了添加set editing-mode vi
到的选项.inputrc
。
我用谷歌搜索了一下,两者似乎都做了同样的事情,两者之间有什么关键区别吗?
答案1
.inputrc
(和/etc/inputrc
)是GNU库的配置文件readline
。readline
与 bash 一起开发,目前均由 Chet Ramey 维护,但它也被许多其他 GNU 和非 GNU 应用程序使用,包括gdb
、python3
或 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
)来将行编辑器模式更改为vi
style(或以 开头bash
)bash -o vi
,最终会执行相同的操作。
请注意,它还bash
从 csh 和 tcsh 中获得了很多功能。在 中tcsh
,您可以使用 和 来切换键绑定的vi
和样式。这也是支持的,但不是。emacs
bindkey -v
bindkey -e
zsh
bash
答案2
这些.inputrc
设置将在所有使用的应用程序中生效libreadline
,包括但不限于bash
.
set -o vi
只会.bashrc
影响bash
。