从编程的角度来看,当您将bash shell设置为通过
使用vi或emacs时set -o vi
或
set -o emacs
这里到底发生了什么?我一直在读一本书,声称bash shell使用这些编辑器中的任何一个作为shell本身的输入,但我认为它可能使用了readline。
答案 0 :(得分:6)
Bash仍在使用readline。 Readline使用emacs或vi模式,并在各种编辑器模式之间设置模式切换。您可以检查基本源代码中的lib / readline文件夹,以查看各种键绑定。
答案 1 :(得分:1)
它使用其中一个编辑器的用户熟悉的击键来编辑命令行。
Readline是为Bash和其他程序提供该功能的工具。
来自man bash
:
READLINE This is the library that handles reading input when using an interac‐ tive shell, unless the --noediting option is given at shell invocation. Line editing is also used when using the -e option to the read builtin. By default, the line editing commands are similar to those of emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time using the -o emacs or -o vi options to the set builtin (see SHELL BUILTIN COMMANDS below). To turn off line editing after the shell is running, use the +o emacs or +o vi options to the set builtin.
答案 2 :(得分:1)
据我所知,readline
为bash提供了行编辑功能。
一个附带条件:当你在vi命令模式下按v
时,你会得到一个完整的vi
编辑器来编辑你的命令行。
来自man bash
:
READLINE
这是在使用交互式shell时处理读取输入的库,除非在shell调用中给出--noediting
选项。默认情况下,行编辑命令与emacs类似。还提供vi风格的线编辑界面。要在shell运行后关闭行编辑,请使用内置+o emacs
的{{1}}或+o vi
选项。
当shell向您显示提示时(除非您处于非编辑模式),您已经使用set
。您将处于emacs模式或vi插入模式(这就是您可以使用readline
返回vi命令模式的原因)。
答案 3 :(得分:1)
根据手册页BASH_BUILTINS(1)(在Fedora 8上):
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
...(跳过所有单个字母选项)
-o option-name The option-name can be one of the following:
...
emacs Use an emacs-style command line editing interface. This is enabled by default when the shell is interactive, unless the shell is started with the --noediting option....
vi Use a vi-style command line editing interface.我认为这意味着bash直接解释行编辑的命令。此选项仅设置要使用的命令集。有关readline(3)的信息,请参见手册页。