在 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 中按 Esc 加 Backspace 将清除光标位置之前的所有内容。
(在 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粘贴删除的命令。
(可选:按End或Ctrl-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 中,如何清除当前输入?的主要内容,如果未能解决你的问题,请参考以下文章