在多个论坛上,我都遇到过添加set -o vi
到我的文件的问题。今天我看到了添加到的.bashrc
选项。set editing-mode vi
.inputrc
我谷歌了一下,发现两者似乎都做了同样的事情。两者之间有什么关键区别吗?
答案1
交互式 Bash 使用Readline 库读取命令行。除 Bash 之外的程序也可以使用该库。该库旨在以交互方式读取用户的命令(或任何内容),具有相当高级的行编辑、键绑定、历史记录等功能。
.inputrc
是自定义 Readline 的默认文件。任何使用 Readline 的程序(包括 Bash)都会受到您放入文件中的内容的影响(除非 Readline 使用另一个文件;有方法可以自定义)。inset editing-mode vi
直接.inputrc
配置 Readline。
.bashrc
是自定义 Bash 的默认文件。它可以用来运行任何程序并配置 Bash 本身,包括 Readline由 Bash 使用;但其他程序使用的 Readline 除外。set -o vi
在命令行编辑中启用 vi 模式。一般来说POSIX 要求set -o vi
,但它不强制 shell 使用 Readline。只是因为 Bash 确实使用 Readline,所以set -o vi
Bash 中与 Readline 无关。Bash实现 set -o vi
通过配置它使用的 Readline。在 Bash 中,set -o vi
有一种间接的方式可以告诉 Bash 使用的 Readline 将其设置editing-mode
为vi
。
你发现的两种方法会得到相同的结果在 Bash 中。对于使用 Readline 的其他程序,.inputrc
重要和.bashrc
不重要。任何此类程序可能支持也可能不支持其自己的rc 文件用于配置程序本身,并且可能(间接)配置它使用的 Readline,就像 Bash 对 所做的那样.bashrc
。
如果 Bash 即将使用 Readline 并进行解析,.bashrc
则 Readline 将在解析.inputrc
之前.bashrc
进行读取。这意味着如果两个文件中的 Readline 设置存在冲突,则来自的设置.bashrc
将最后重新配置 Readline,因此它们将获胜。