如何清除/删除终端中的当前行?


793

如果我使用终端并在命令的文本行中键入,是否有热键或任何方式清除/删除该行?

例如,如果我当前的行/命令确实很长,例如:

> git log --graph --all --blah..uh oh i want to cancel and clear this line <cursor is here now>

是否有热键或命令可以从上面转到:

>

通常,我会按该键,如果我当前的行是历史上的全新行,则将其清除。但是,如果我通过按键浏览命令历史记录并开始编辑或使用这些命令,则只会将提示更改为历史记录中的下一个最新命令,因此除非我按多次,否则该命令在这里不起作用。


6
快捷方式更快地行动在bash命令行 本页面更能说明问题,更好的解释,我认为
加布是好人


Answers:


1490

您可以使用Ctrl+ U清除开头。

您可以使用Ctrl+ W删除仅一个单词。

您也可以使用Ctrl+ C取消。

如果要保留历史记录,可以使用Alt+ Shift+ #对其进行注释。


Bash Emacs编辑模式备忘单


230
Ctrl-U删除的行也可以用Ctrl-Y调用。
keks

65
?非常酷,谢谢keks&kev,⌃ + U在光标之前全部删除,⌃ + K在光标之后全部删除,⌃ + A是行首。因此从技术上讲,⌃ + C是该问题的最佳解决方案
Binarian

3
Alt-Shift-#不起作用?以为别人做。Alt-Shift-#在终端上打印>字符
tgkprog

49
赞成教我<kbd>...</kbd>标记以显示SO中的键。
Samveen 2013年

11
@LưuVĩnhPhúc ESC是bash中自己的修饰键。它用于取消历史记录导航(CTRL+ r)或交换光标后面的最后两个单词(ESC+ t)。
noobish

577

只是总结所有答案:

  • 清理行:您可以使用Ctrl+ U清理到开头。
  • 清理线路:Ctrl+ E Ctrl+ U擦拭终端中的当前线路
  • 清理线路:Ctrl+ A Ctrl+ K擦拭终端中的当前线路
  • 取消当前的命令行/行:Ctrl+ C
  • 调用已删除的命令:Ctrl+ Y(然后Alt+ Y
  • 转到行首:Ctrl+A
  • 转到行尾:Ctrl+E
  • 例如,如果您位于命令中间,则删除前向单词:Ctrl+K
  • 删除左侧的字符,直到单词开头:Ctrl+W
  • 要清除整个命令提示符:Ctrl+L
  • 在行首和当前光标位置之间切换:Ctrl+XX

6
注意ctrl-k删除光标和行尾之间的所有内容。
彼得·伯格

6
删除下一个单词:Alt + D
cnlevy

1
Alt+ D 不起作用,这就是为什么我没有包括它的原因:(
J4cK

1
CTRL + L清除屏幕,但保留在当前命令行中键入的内容。
Aziraphale

1
Ctrl + Alt + >移至输入历史记录的末尾,当您要取消搜索历史记录时,这是完美的选择。
astasiak

164

我有完整的快捷方式列表:

  1. Ctrl+ a 将光标移到行首
  2. Ctrl+ e 将光标移到行尾
  3. Ctrl+ b 向后移一个字符
  4. Alt+ b 后退一个字
  5. Ctrl+ f 前进一个字符
  6. Alt+ f 向前移动一个字
  7. Ctrl+ d 删除当前字符
  8. Ctrl+ w 砍掉最后一个字
  9. Ctrl+ k 剪切光标后的所有内容
  10. Alt+ d 在光标后切词
  11. Alt+ w 在光标之前剪切单词
  12. Ctrl+ y 粘贴最后删除的命令
  13. Ctrl+ _ 撤消
  14. Ctrl+ u 剪切光标之前的所有内容
  15. Ctrl+ xx在第一位置和当前位置之间切换
  16. Ctrl+ l 清除终端
  17. Ctrl+ c 取消命令
  18. Ctrl+ r 历史记录中的搜索命令-输入搜索词
  19. Ctrl+ j 在当前历史记录条目中结束搜索
  20. Ctrl+ g 取消搜索并恢复原始行
  21. Ctrl+ n 历史记录中的下一个命令
  22. Ctrl+ p 历史记录中的上一个命令

5
抱歉,但是我提供了所有有用的快捷键,其中7,8,9,10,11,14,16,17是可以根据要求使用的清除/删除快捷键。
tharunkumar

2
应该提到的是CTRL+ L(16.)保留了当前命令行的内容。
Aziraphale

在Windows上,您似乎需要使用Ctrl + Shift + A转到行的开头
Gandalf458 '17

3
它缺少Ctrl+ h:删除光标前的字符
peflorencio 18'Apr


16

或者,如果你使用vi模式,命中Esc之后cc

找回刚刚擦除的内容,Esc然后p:)


5
您可以通过启用vi模式echo 'set editing-mode vi' >> ~/.inputrc。也可在python解释器提示和某些SQL客户端等地方使用
dwurf 2014年

11

我不确定您是否喜欢它,但是我使用Ctrl+ A(开始该行)和Ctrl+ K(删除该行),我从emacs熟悉了这些命令,并且偶然发现了它们。



6
  • Ctrl+ u移至行首至环形缓冲区
  • Ctrl+ k移至行尾至环形缓冲区
  • Ctrl+ w光标左侧的字符和(多个)单词移动到环形缓冲区

  • Ctrl+ y:从环形缓冲区插入最后一个条目,然后可以使用Alt+ y旋转环形缓冲区。多次按以继续在环形缓冲区中“上一个”条目。


4

CTRL+ R并开始键入以搜索历史记录中的先前命令。将显示实线。
CTRL+ R再次循环。



2

添加到列表:

在Emacs模式下,点击Esc,然后点击,R将删除整行。

我不知道为什么,只是碰巧找到了它。也许它不用于删除行,但碰巧具有相同的效果。如果有人知道,请告诉我,谢谢:)

在Bash中有效,但在Fish中无效。


1
这是revert-linereadline命令:“撤消对此行所做的所有更改”。默认情况下,它绑定到M-r(Meta-R),可以是Alt-R或EscR。如果您在命令历史记录中向后滚动并更改命令,然后发出revert-line,它将更改回原来的命令,而不删除该行。
本杰明·W.

2

要删除整行,无论光标在何处,都可以使用该kill-whole-line命令,但是默认情况下它是未绑定的。例如,可以通过插入将其绑定到Ctrl+ Alt+K

"\e\C-k": kill-whole-line

放入您的Readline初始化文件(通常为~/.inputrc)。

各种说明:

  • 为避免意外重新分配已经用于其他功能的键序列,您可以使用来检查所有绑定bind -P。检查与建议的绑定

    bind -P | grep '\\e\\C-k'
  • Readline初始化文件名​​取自shell变量INPUTRC。如果未设置,则默认值为~/.inputrc或(如果不存在)/etc/inputrc。请注意,如果您有~/.inputrc/etc/inputrc将被忽略。
  • 要重新加载Readline初始化文件,可以使用Ctrl+ X Ctrl+ R
  • 链接到相关手册部分:

2

为了清洁整个生产线(两种不同方式):

  • HomeCtrl+K
  • EndCtrl+U

0

Alt+ #注释掉当前行。如果需要,它将在历史记录中可用。

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.