Readline 库如何使用 .inputrc 文件?

Readline 库如何使用 .inputrc 文件?

在他的Linux 实用指南, 4e,索贝尔给了我们以下片段:

$ cat ~/.inputrc 
set editing-mode vi 
$if mode=vi
      "\C-y": vi-next-word
   $else
      "\C-y": forward-word
$endif

该代码片段的出现是为了让 CONTROL-Y 将光标移动到下一个单词的开头,无论 bash 处于 vi 还是 emacs 模式。

我感到困惑的是,鉴于此代码片段,我们如何才能处于 emacs 模式。我目前的理解如下:

  1. 当我使用 Readline 库中的一些元素/快捷方式/令牌(我不知道这个术语)时,bash 会在 input.rc 中查找以了解我的意思。

  2. 如果 1) 为真(也许不是,并且 input.rc 仅用于初始化新 shell,但在这种情况下,我无法理解为什么$else上面的子句是相关的,因为它永远不会到达?)然后我使用set -o emacs并且也许使用CONTROL-Y在命令行的给定条目中向前跳过,不会读取 input.rc 并将我切换回某种editing-mode = vi情况吗?

答案1

我认为你几乎猜对了。

set editing-mode将确定使用哪种 Readline 模式默认情况下。但bash允许您随时切换模式;使用 Readline 的其他应用程序也可能这样做。

每次按下按键时读取实际.inputrc文件的效率很低,因此实际发生的情况可能更像是:

当程序初始化 Readline 库时,该库将读取该.inputrc文件,准备所需的设置两种模式。将set editing-mode立即确定首先向用户提供哪种模式;但两种模式仍将被配置,以防用户稍后想要切换模式。

如果没有条件,任何键绑定将在可能的情况下应用于两种模式;使用$if mode=条件构造,您可以使键绑定仅应用于特定模式。

还有其他条件构造:$if term=仅当当前终端属于特定类型时才可用于配置键绑定,并且$if application=可用于在.inputrc.

相关内容