【问题标题】:Is there a hotkey to select all the text I've typed in a unix command?是否有一个热键可以选择我在 unix 命令中输入的所有文本?
【发布时间】:2014-08-13 19:44:49
【问题描述】:

在某些 shell(例如 Mac OS X 上的终端)中,我想选择我在命令行中输入的所有文本。例如,我在命令行中输入了这个,但还没有按回车。我想做一个全选(例如 ctrl A 或 apple A),以便我可以剪切或复制此命令(ctrl X/C 或 apple X/C)。

$ grep -r "test" .

有没有一种方法可以做到这一点,而不必使用鼠标并实际选择所有命令?当我需要复制 unix 命令发送给其他人时,这将使生活更轻松。

【问题讨论】:

    标签: macos bash shell unix terminal


    【解决方案1】:

    这是它在我的 OSX 笔记本电脑上的工作原理。

    bash$ echo "this is a command I haven't run yet"             # press Ctrl-u here
    bash$                                                        # blank line
    bash$ pbcopy <<<                                             # now I press Ctrl-y
    bash$ pbcopy <<< echo "this is a command I haven't run yet"  # press Enter
    bash$
    

    从这里,命令在剪贴板中,我没有使用鼠标或设置任何键盘快捷键。这将适用于标准 bash,因此您也不需要设置 MacPorts。

    【讨论】:

    • 我发现,至少在 OS X 10.9 上,简单的 CTRL-u/CTRL-y 本身就可以正常工作。我也在使用 iTerm……谢谢你的提示。 +1
    【解决方案2】:

    您的终端可能会提供类似的功能。像screentmux 这样的应用程序有时也提供类似的东西(尽管我认为通常只用于shell 会话而不是系统剪贴板)。几乎所有其他方法都存在分层问题。

    【讨论】:

      【解决方案3】:

      我不相信有选择所有文本的终端快捷方式。一种替代方法是使用 pbcopy 命令将最后一个命令复制到系统粘贴板中。

      fc -ln -1 | pbcopy
      

      然后,您可以使用 Command-V 粘贴计算机上的其他任何位置。它可能并不比使用鼠标快,但如果你需要做很多,你可以创建一个别名。

      【讨论】:

        【解决方案4】:

        不适用于 OS X 默认 bash。 (只有 3.2)。

        但是如果你安装 bash 4.0+(我推荐使用MacPorts)你可以使用下一个功能:

        绑定

        -x keyseq:shell 命令

        只要输入keyseq,就会执行shell-command。 当 shell-command 被执行时,shell 设置 READLINE_LINE 变量为 Readline 行缓冲区的内容和 READLINE_POINT 变量到当前插入位置 观点。如果执行的命令改变了 READLINE_LINE 的值或 READLINE_POINT,这些新值将反映在编辑中 状态。

        因此,例如,您可以绑定 CTRL-X c 序列,(按 CTRL-X 并在一个简单的“c”之后) 到pbcopy 下一个bind 命令:

        bind -x '"\C-xc":pbcopy <<<"$READLINE_LINE"'
        

        现在,您在 bash 中输入的任何内容,在按下“CTRL-X c”后都会被复制到剪贴板中。

        如果你不喜欢这个序列,你也可以在 Terminal.app -> Preferences -> Settings -> Keyboard 中设置序列,就像下一个屏幕截图一样

        我将“CTRL-X c”\030c 绑定到 CTRL-ALT-LEFT_ARROW,所以现在我两者都有了绑定。

        【讨论】:

          【解决方案5】:

          您可以使用历史文件来执行此操作。让您的 bash 立即将所有命令写入历史文件,如 here 所述

          然后进行键绑定以运行脚本tail ~/.bash_history -n 1 | pbcopy。或者您可以将此脚本直接集成到 PROMPT_COMMAND 变量中,如链接中所述。

          未测试: PROMPT_COMMAND="history -a; history -c; history -r; tail ~/.bash_history -n 1 | pbcopy; $PROMPT_COMMAND"

          【讨论】:

            最近更新 更多