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

Posted

技术标签:

【中文标题】在 bash 中,如何清除当前输入?【英文标题】:In bash, how does one clear the current input? 【发布时间】:2010-11-06 14:00:17 【问题描述】:

假设您在 bash 中开始编写如下命令:

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

然后意识到您毕竟不想执行此操作。有没有办法通过一两次击键清除输入?

我最近一直在做的是在 echo 前面加上引号(Ctrl+A、echo "、Ctrl+E、")然后按回车键。有更快的方法吗?

【问题讨论】:

或者,假设您粘贴了一个命令,并意识到它是错误的单行。退格在大约 20 个字符后变得非常老了! Ctrl-C,如果要保留历史请参考***.com/a/9679852/6521116 【参考方案1】:

这是knittl's answer 的扩展,它通过在控制台历史记录中添加前缀来存储该行。克服剪贴板的缺点,例如意外覆盖或无法查看剪切线以供参考。

评论行和返回新提示

使用任一快捷键:

Esc,# Alt+#

哈希字符# 将被添加到该行的前面,从而将整行转换为注释。它还将返回一个新提示,就好像用户按下了回车一样。例如

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

检索注释行

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

向上 Ctrl+p

重复快捷键直到出现所需的行。


快速去除哈希前缀

要删除行的哈希 # 前缀,有几个不同的选项可用:

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

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

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

首页删除 Ctrl+a, Ctrl+d

【讨论】:

【参考方案2】:

如果你在vi mode中使用Bash(用set -o vi设置),然后按Esc切换到vi的普通模式,输入dd删除当前行!

【讨论】:

【参考方案3】:

Ctrl-U, Ctrl-K 也可以。

Ctrl-U 删除从行首到光标的所有内容,Ctrl-K删除从光标到行尾的所有内容。 (有时只使用其中一个很有用。)

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

考虑使用 Ctrl-U (或 Ctrl-E 然后 Ctrl kbd>-U) 会将您清除的内容存储在缓冲区中,以便您以后可以使用 Ctrl-Y 粘贴它。

【讨论】:

【参考方案6】:

要删除当前行,请尝试:

Ctrl-X, Ctrl-U

您也可以使用:

Esc-D

需要在 ~/.inputrc:

"\ed": kill-whole-line 

见:http://codesnippets.joyent.com/posts/show/1690

【讨论】:

如果您只想使用转义键清除整行,请添加"\e\e": kill-whole-line(但必须双击 esc 键)【参考方案7】:

试试 Ctrl+U。这会清除输入行。

【讨论】:

谢谢,我几乎接受了这个答案。但我发现它只清除光标之前的输入。在某些情况下,我正在编辑命令,所以我宁愿记住 Ctrl+C 而不是 Ctrl+U 只是“丢弃当前输入”。【参考方案8】:

    Ctrl-U 删除光标前的所有内容。删除的命令将被存储到缓冲区中。按Ctrl-Y粘贴删除的命令。

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

    或者,按 Ctrl-C 中止您正在输入的内容。

【讨论】:

有一个警告:Ctrl-C 会杀死当前提示,启动一个新的提示,并将返回码设置为 1。 不要习惯,使用 Ctrl-U。 Ctrl-C 在 bash 中并没有那么糟糕,但是如果你有例如mysql客户端提示,Ctrl-C会断开与服务器的连接,真的很烦人。 请注意,在许多系统上,到目前为止,还有一个终端“kill”字符会终止输入。通常,这就是 control-X。您可以通过stty -a 查询。这适用于任何不主动修改终端控件的程序。 Ctrl-A 后跟 Ctrl-K 也可以。 'killed' 文本被存储,您可以使用 Ctrl-Y 粘贴它。这些击键实际上来自读取行库:cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. 所以您可以在任何用户界面使用该库的工具(实际上是 Emacs、bash 等)中找到它们。您可以通过编辑 .inputrc 文件来自定义其行为(有关更多详细信息,请查看上面的链接)。【参考方案9】:

一个不错的快捷键是按Esc#。它会在前面加上一个# 字符(从而使该行成为注释),然后按回车键。如果您随后决定仍然需要该命令,那么您的历史记录中仍然有它 :)

【讨论】:

在大多数终端中,这也与 Alt+# 相同,使其成为一个(和弦)键击。 一个简单而聪明的解决方案,我认为这是一种更加用户友好的取消命令的方式。正是我正在寻找的:)【参考方案10】:

有两种方法可以做到这一点

ctrl+c - 无论光标在哪里,都会清除整行。

ctrl+u - 这会清除从光标位置到开头的行。

【讨论】:

“考虑使用 C-u(或 C-e 然后 C-u)将您清除的内容存储在缓冲区中,以便您以后可以使用 C-y 粘贴它。” Markisisme 一个更简单的单个命令是 ctrl+_。 ***.com/questions/1056440/… 由 john kug 回答——刚刚开始 *** 没有足够的积分来为您的回答添加评论。【参考方案11】:

在http://www.ice2o.com/bash_quick_ref.html 和searching 找到一个简短的参考。

ctrl + e (如果不在行尾)加上 ctrl + u 就可以了它。

【讨论】:

以上是关于在 bash 中,如何清除当前输入?的主要内容,如果未能解决你的问题,请参考以下文章

在Ubuntu系统中清楚Bash日志记录方法

Bash 快捷键总结

Bash快捷键

如何在 Flutter 中清除输入文本

nodejs 如何升级到最新版本

Linux Bash-vim