Windows shell Escape 键(删除整行)在 Bash 中等效

Ani*_*esh 17 command-line bash

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

我发现Esc在 bash 提示符下按键没有任何作用。按Esc然后backspace删除一个单词,但必须为每个单词执行此操作。

我正在逐步学习 Bash,有时会在行的中间输入一些愚蠢的内容,并觉得最好从头开始输入。要做到这一点,按下backspace是我迄今为止发现的唯一方法。

你做什么工作?

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

Ign*_*ams 16

你想要kill-whole-line,但这在 bash 中默认不受约束。backward-kill-line( CtrlX Backspace) 和unix-line-discard( CtrlU) 都从当前点擦除到行首,因此只需转到行尾并使用其中一个即可。


enz*_*tib 15

您可以使用Ctrl+C放弃您正在输入的任何内容并获得一个空的新命令行,请参阅CTRL+C 用于返回命令行是否不正确?.


小智 6

Ctrl+a转到行首并Ctrl+k删除到行尾


Wil*_*n F 6

为了稍微扩展 Ignacio Vazquez-Abrams 的回答,您可以Esc通过将kill-whole-linetoEsc与以下命令绑定,从bash 中的密钥获得(几乎)类似 Windows 的行为

bind '"\e":kill-whole-line'
Run Code Online (Sandbox Code Playgroud)

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

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

"\eb": backward-word
Run Code Online (Sandbox Code Playgroud)

它设置组合Esc+B将光标移回最近的单词开头 - 更像Ctrl+ ,除了如果您想连续多次执行它,您必须继续释放EscB当然还有 ) )。

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

但是,如果您不关心任何这些,并且宁愿忍受延迟而不是重新训练自己以适应不同的击键,那么这是可以做到的。

(注意:这里的大部分信息都是我通过阅读 - 并按照 -这个答案中的链接获得的。)

  • 这是非常有帮助的,谢谢,并且或多或少地像宣传的那样工作。但是我确实发现它在“无效”执行 *other* 命令时产生了一些烦人的行为,例如在行尾按 DEL:这将清除该行并将其替换为 `[19;` 或类似的 -寻找转义码。最后,我发现将 `"\e\e"` 映射到 `kill-whole-line`(即,点击 Esc 两次以清除该行)是一个不错的折衷方案。 (3认同)