Windows Shell Escape键(删除整行)等效于Bash


13

在Windows命令行(powershell和cmd)中,当您Esc在一行上按键时,将删除您在提示符下键入的任何内容。

我发现Esc在bash提示符下按键无济于事。按下Esc然后backspace删除一个单词,但是必须对每个单词执行此操作。

我正在逐步学习Bash,有时在行的中间输入一些愚蠢的字,觉得最好从头开始输入。为此,backspace直到现在我才发现按。

你是做什么?

我知道clear命令和Ctrl-L快捷方式,但是我不是在谈论清除整个终端。只是线。


1
不久前,我在超级用户上发布了有用的readline键盘快捷键列表。您可能会发现它们也很有用。(Readline是bash用于行编辑的库。)
jw013'2

嘿jw013,谢谢你的编辑。:-)
Animesh

Answers:


15

您需要kill-whole-line,但默认情况下,bash中未绑定此功能。backward-kill-lineCtrlX Backspace)和unix-line-discardCtrlU)都从当前点擦除到行的开头,因此只需转到行的末尾并使用其中之一即可。


您是正确的,它不受任何约束。我刚刚发现使用bind -P。我想Ctrl-U,那Ctrl-Y是唯一的选择。
Animesh

您会发现许多默认绑定是从Emacs编辑器中的键序列派生的,并且这些绑定也显示在其他位置。
Blrfl 2012年

@Blrfl来扩展您的评论,这些键绑定中的大多数已被抽象到readline库中,大量命令行程序使用了readline库,这就是为什么它们都具有相似的行编辑键的原因。
jw013


6

Ctrl+a移至行首,然后Ctrl+k删除至行尾


^U首先尝试,在大多数Emacs命令行编辑模式实现中,它已经删除了整个行。在那些仅从光标左侧删除的位置(例如,GNU readline),然后按^K
mirabilos

3

要稍微扩展一下Ignacio Vazquez-Abrams的答案,您可以Esc通过使用以下命令绑定kill-whole-line到bash中的键来获得(几乎)类似于Windows的行为Esc

bind '"\e":kill-whole-line'

如果将行添加到~/.inputrc文件中,则绑定将在会话之间保持不变。

但是请注意,这是非常不标准的,因为bash实际上使用该Esc键作为另一个修改键(例如非持久性Alt或Ctrl)。如果查看现有键绑定(带有bind -P)的列表,则可能会看到几个绑定到以“ \ e”开头的键组合的命令(例如,

"\eb": backward-word

它设置了组合Esc+ B,将光标移回最近的单词开头–与Ctrl+ 相似,不同之处在于,如果要连续执行多次,则必须不断释放EscB当然还有) )。

这就解释了为什么我说您得到的行为几乎类似于Windows:当您按下时Esc,bash会检查您是否将它与另一个键结合使用;因此,如果您将其绑定到kill-whole-line,则在按下(或更确切地说,释放)Esc和bash为您清除行之间会有一些延迟。

但是,如果您不关心任何这些,而是​​宁愿拖延时间而不是将自己重新训练为其他按键,那么可以这样做。

(注意:我在这里获得的许多信息是阅读并遵循此答案中的链接所获得的。)


1
谢谢,这非常有帮助,并且效果与广告中的差不多。但是我确实发现,当“无效”执行其他命令时,它会产生一些令人讨厌的行为,例如在一行的末尾按DEL:这将清除该行,并将其替换[19;为类似的转义代码。最后,我发现映射"\e\e"kill-whole-line一个不错的折衷方案(即,点按两次Esc以清除该行)。
j_random_hacker

@j_random_hacker:嗯,我喜欢。Esc无论如何我经常打几次,所以我可以尝试一下。我目前将其绑定到Ctrl+,Del但我永远不会记住。
Wilson F
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.