bash使用vi或emacs

时间:2009-11-13 02:13:34

标签: bash libreadline

从编程的角度来看,当您将bash shell设置为通过

使用vi或emacs时
set -o vi

set -o emacs

这里到底发生了什么?我一直在读一本书,声称bash shell使用这些编辑器中的任何一个作为shell本身的输入,但我认为它可能使用了readline。

4 个答案:

答案 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)的信息,请参见手册页。