什么是 Readline 向后删除字符(Rubout)

Ala*_*ler 5 linux shell bash readline

man bash 说:

向后删除字符(Rubout)

删除光标后面的字符。当给定一个数字参数时,将删除的文本保存在 kill ring 上。

Rubout 只是键盘上的 Delete 键吗?因为它和bash描述的backward-delete-char具有相同的功能。

但是当我尝试:

向后杀伤线(Cx Rubout)

杀回行首。

考虑以下情况:

$ testa testb testc testd
Run Code Online (Sandbox Code Playgroud)

假设该点在testc'st 上,现在我按 Control+x 然后按键盘上的 Delete 键。结果是:

$ testa testb [3~testc testd
Run Code Online (Sandbox Code Playgroud)

我只是无法理解,我错过了什么吗?

ImH*_*ere 7

在简单的描述中,需要澄清三个概念:

向后删除字符(Rubout)


  • 有一个名为 的键Delete,您将在示例中使用它。
    该键擦除“下一个字符”。
    如果该行包含test1并且光标(闪烁的指示器)位于字母 上sDelete则将擦除s.
    相反,有一个名为 的键Backspace,它在完全相同的条件下将擦除字母e。那是光标前面的字母。

    Backspace键在 bash 手册中由“向后删除字符(Rubout)”描述。

    那个键,显然是“删除光标后面的字符”。

  • 数字参数
    要给它一个“数字参数”,您需要按Alt- 2,例如,这会将 a2作为参数放置到下一个命令(或键)。

    同样,如果单词 test 写在行中,并且光标位于s,请按Alt-2然后按Backspace。这将Back擦除两个字符,te即单词中的test

  • 杀戒。当某些东西被擦除时,在大多数情况下,被放置在一个终止环中。
    要获取“kill ring”中的内容,请使用ctrl- y

    如果您使用alt- 3-擦除多个字符,Backspace这些字符将使用ctrl- 重新出现y

    详细:

    如果您使用命令的参数Backspace,您将擦除与参数所说的光标当前位置“之前”一样多的字符。

    如果在命令提示符下有这个字符串:

    $ testa testb testc
    
    Run Code Online (Sandbox Code Playgroud)

    并且光标在字母“b”下,一个Alt- 3-Backspace将删除字符“est”:

    $ testa tb testc
    
    Run Code Online (Sandbox Code Playgroud)

    这些字符将打印回ctrl-y

现在:

向后杀伤线(Cx Rubout)

按下方式:ctrl-x Backspace

这会将整行“在光标之前”放置在终止环中。

并且,键:ctrl-x Delete没有为它们定义动作,这将使等效的 ANSI 代码被打印:

[3~
Run Code Online (Sandbox Code Playgroud)

在您的终端中。可以在 ~/.inputrc 中更改 bash 使用的 readline 库。但我相信,这超出了这个答案的范围。