“set editing-mode vi” 与 “set -o vi” 有什么区别?

“set editing-mode vi” 与 “set -o vi” 有什么区别?

在多个论坛上,我都遇到过添加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 viBash 中与 Readline 无关。Bash实现 set -o vi通过配置它使用的 Readline。在 Bash 中,set -o vi有一种间接的方式可以告诉 Bash 使用的 Readline 将其设置editing-modevi

你发现的两种方法会得到相同的结果在 Bash 中。对于使用 Readline 的其他程序,.inputrc重要和.bashrc不重要。任何此类程序可能支持也可能不支持其自己的rc 文件用于配置程序本身,并且可能(间接)配置它使用的 Readline,就像 Bash 对 所做的那样.bashrc

如果 Bash 即将使用 Readline 并进行解析,.bashrc则 Readline 将在解析.inputrc之前.bashrc进行读取。这意味着如果两个文件中的 Readline 设置存在冲突,则来自的设置.bashrc将最后重新配置 Readline,因此它们将获胜。

相关内容