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

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

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

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

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

【问题讨论】:

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

标签: bash input


【解决方案1】:
  1. Ctrl-U 删除光标前的所有内容。删除的命令将被存储到缓冲区中。按Ctrl-Y粘贴删除的命令。

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

  2. 或者,按 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 文件来自定义其行为(有关更多详细信息,请查看上面的链接)。
【解决方案2】:

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

【讨论】:

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

http://www.ice2o.com/bash_quick_ref.htmlsearching 找到一个简短的参考。

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

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

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

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

      【讨论】:

        【解决方案8】:

        Ctrl-U, Ctrl-K 也可以。

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

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

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

          【讨论】:

            【解决方案11】:

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

            评论行和返回新提示

            使用任一快捷键:

            • Esc,#
            • Alt+#

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

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

            检索注释行

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

            • 向上
            • Ctrl+p

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


            快速去除哈希前缀

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

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

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

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

            • 首页删除
            • Ctrl+a, Ctrl+d

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-05-03
              • 2016-08-11
              • 1970-01-01
              • 2011-10-11
              • 1970-01-01
              相关资源
              最近更新 更多