6

从编程的角度来看,当您将 bash shell 设置为使用 vi 或 emacs 时

set -o vi

或者

set -o emacs

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

4

4 回答 4

6

Bash 仍在使用 readline。Readline 使用 emacs 或 vi 模式,并在各种编辑器模式之间设置模式切换。您可以检查基本源代码中的 lib/readline 文件夹以查看各种键绑定。

于 2009-11-13T02:23:58.813 回答
1

它使用这些编辑器之一的用户熟悉的击键来编辑命令行。

Readline 是为 Bash 和其他程序提供该功能的工具。

来自man bash

阅读线
       这是在使用交互时处理读取输入的库
       tive shell,除非在 shell 调用时给出了 --noediting 选项。
       当使用 read 内置的 -e 选项时,也使用行编辑。
       默认情况下,行编辑命令与 emacs 类似。一种
       vi风格的行编辑界面也可用。行编辑可以
       使用 -o emacs 或 -o vi 选项随时启用
       内置(请参阅下面的 SHELL BUILTIN 命令)。关闭行编辑
       在 shell 运行后,使用 +o emacs 或 +o vi 选项
       设置内置。
于 2009-11-13T02:19:48.230 回答
1

据我所知,readline是什么为 bash 提供了行编辑功能。

一个附带条件:当您v在 vi 命令模式下按下时,您将获得完整的vi编辑器来编辑您的命令行。

来自man bash

READLINE
     这是在使用交互式 shell 时处理读取输入的库,除非--noediting在 shell 调用时给出了该选项。默认情况下,行编辑命令与 emacs 类似。还提供了 vi 风格的行编辑界面。要在 shell 运行后关闭行编辑,请使用内置的+o emacsor+o vi选项。set

当 shell 向您显示提示时(除非您处于非编辑模式),您已经在使用readline. 您将处于 emacs 模式或 vi 插入模式(这就是为什么您可以使用ESC返回 vi 命令模式的原因)。

于 2009-11-13T02:20:54.053 回答
1

根据手册页 BASH_BUILTINS(1) (在 Fedora 8 上):

   set [--abefhkmnptuvxBCHP] [-o option] [arg ...]

...(跳过所有单字母选项)

         -o 选项名称
            选项名称可以是以下之一:

...

            emacs 使用 emacs 风格的命令行编辑界面。这是
                    当 shell 交互时默认启用,除非
                    shell 以 --noediting 选项启动。
...
            vi 使用 vi 风格的命令行编辑界面。
我将其解释为 bash 直接解释用于行编辑的命令。此选项仅设置要使用的命令集。请参阅 readline(3) 的手册页。

于 2009-11-13T02:24:41.153 回答