在bash中,如何清除当前的输入?

200

假设在bash中,您开始编写一个类似于以下命令的命令:

$ rm -rf /foo/bar/really/long/path/here

然后你意识到你并不想执行它。有没有一种方法可以用一个或两个按键清除输入内容?

我最近一直在使用的方法是在输入前添加echo并将输入内容用引号括起来(Ctrl+A,echo ",Ctrl+E,"),然后按回车。 有更快的方法吗?


或者,假设您粘贴了一个命令,然后意识到它是错误的一行代码。在输入20个字符后,使用退格键会变得非常繁琐! - bgStack15
2
<kbd>Ctrl</kbd>-<kbd>C</kbd>,如果你想要保留历史记录,请参考https://dev59.com/_2kw5IYBdhLWcg3wu9Fh#9679852。 - LF00
11个回答

346
  1. 按下Ctrl-U删除光标前的所有内容。被删除的命令将会被存储到一个缓冲区中。按下Ctrl-Y来粘贴刚刚删除的命令。

    (可选:先按下EndCtrl-E跳到输入的末尾。)

  2. 或者,按下Ctrl-C取消正在输入的内容。


32
注意:按下Ctrl-C将终止当前提示符,启动一个新的提示符,并将返回代码设置为1。 - user716468
17
不要习惯使用Ctrl-C,改用Ctrl-U。在bash中使用Ctrl-C还不错,但如果你有MySQL客户端提示符,按下Ctrl-C将会断开与服务器的连接,这真的很烦人。 - Christian
1
请注意,在许多系统上,还有一个终端“kill”字符,可以杀死到目前为止的输入。通常,这是控制-X。您可以使用stty -a进行检查。这将适用于任何未主动修改终端控件的程序。 - Jonathan Leffler
按下 Ctrl-A 然后再按 Ctrl-K 也可以剪切文本。被剪切的文本会被存储,你可以使用 Ctrl-Y 粘贴它。这些按键实际上来自于 readline 库:https://cnswww.cns.cwru.edu/php/chet/readline/rluserman.html,所以你可以在任何使用该库的用户界面工具中找到它们(实际上包括 Emacs、bash 等)。你可以通过编辑 .inputrc 文件来自定义其行为(有关更多详细信息,请参阅上面的链接)。 - rkachach

103

尝试使用Ctrl+U。这将清除输入行。


8
谢谢,我差点就接受这个答案了。但我发现它只能清除光标前的输入内容。在某些情况下,我正在编辑命令的中间部分,所以我宁愿把Ctrl+C记为“丢弃当前输入”,而不是Ctrl+U。 - user85509

31

28

Ctrl-UCtrl-K同样可以完成此操作。

Ctrl-U会删除光标前面的所有内容直到行首,Ctrl-K会删除光标后面的所有内容直到行尾。(使用其中之一有时很有用。)


15

有两种方式可以完成此操作

Ctrl+C- 这会清除整行文本,无论光标在哪里。

Ctrl+U - 这会清除从光标位置到行开头的文本。


2
考虑使用C-u(或C-e,然后C-u),这样可以将您在缓冲区中清除的内容存储起来,以便稍后使用C-y进行粘贴。简单的单个命令是ctrl+_. https://dev59.com/dEjSa4cB1Zd3GeqPDTNz 由john kug回答 - 刚开始使用stackoverflow不足以添加对您的回答评论。 - vks

9
一个不错的快捷方式是按下Esc#。它会在行首添加一个#字符(从而将该行变为注释),然后按回车键。如果你随后决定仍需要该命令,你仍可以在历史记录中找到它 :)

3
在大多数终端中,这也等同于按下 Alt+#,这样只需(同时)按下一个按键即可。 - Dolda2000
一个简单但巧妙的解决方案,我认为这是一种更加用户友好的取消命令的方式。正是我正在寻找的 :) - Cas

9

在bash中,按下EscBackspace会清除光标位置之前的所有内容。

(在Cygwin中,这将清除输入直到下一个单词。单词由空格、下划线等字符分隔...)


4
这是对 knittl答案的扩展,通过在前面加上一个哈希标记来将该行存储到控制台历史记录中。克服了剪贴板的缺点,例如意外覆盖或无法查看剪切行以供参考。

注释行并返回新提示

使用以下快捷键之一:

  • Esc,#
  • Alt+#

一个井号字符#将被添加到行的前面,从而将整行变成注释。 它还会返回一个新的提示,就像用户按下了enter键。 例如:

$ #rm -rf /foo/bar/really/long/path/here
$

检索已注释的行

要从控制台历史记录中恢复旧行,请使用以下快捷方式之一:

  • 向上箭头
  • Ctrl+p

重复按键快捷方式,直到出现所需的行。


快速删除哈希前缀

有几种不同的选项可用于去除行的哈希 # 前缀:

删除第一个字符并立即执行命令:

  • Esc,1,Esc,#
  • Alt+-, Alt+#

将光标移动到开头,并删除第一个字符,而不执行命令:

  • Home, Delete
  • Ctrl+a, Ctrl+d


3
如果您在Bash中使用vi模式(使用set -o vi设置),则按Esc切换到vi的正常模式,然后键入dd以删除当前行!

3

请注意,使用 Ctrl-U (或 Ctrl-E 然后 Ctrl-U)会将您清除的内容存储在缓冲区中,这样您就可以使用 Ctrl-Y 将其稍后粘贴。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接