在某些shell(例如Mac OS X上的终端)中,我想选择我在命令行中输入的所有文本。例如,我在命令行输入了这个,但还没有输入。我想做一个全选(例如ctrl A或apple A),这样我就可以剪切或复制这个命令(ctrl X / C或apple X / C)。
$ grep -r "test" .
有没有办法在不必使用鼠标并实际选择所有命令的情况下执行此操作?当我需要复制unix命令发送给其他人时,这将使生活更轻松。
答案 0 :(得分: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。
答案 1 :(得分:0)
您的终端可能提供类似的东西。像screen
和tmux
这样的应用程序有时也会提供类似的东西(尽管通常只用于我认为的shell会话而不是系统剪贴板)。几乎所有其他事情都存在分层问题。
答案 2 :(得分:0)
我不相信有一个终端快捷方式可以选择所有文字。一种替代方法是使用pbcopy命令将最后一个命令复制到系统粘贴板中。
fc -ln -1 | pbcopy
然后,您可以使用Command-V粘贴计算机上的任何其他位置。它可能不比使用鼠标快,但如果你需要做很多,你可以创建一个别名。
答案 3 :(得分:0)
不使用OS X默认bash。 (它只有3.2)。
但是如果您安装bash 4.0+(我推荐使用MacPorts),您可以使用下一个功能:
<强>结合强>
-x keyseq:shell-command
导致在输入keyseq时执行shell命令。 执行shell-command时,shell会设置READLINE_LINE 变量到Readline行缓冲区的内容和 READLINE_POINT变量到插入的当前位置 点。如果执行的命令改变了READLINE_LINE的值或 READLINE_POINT,这些新值将反映在编辑中 状态。
因此,例如,您可以绑定 CTRL - X c 序列,(按CTRL-X并在简单的&#34之后; c&#34;)使用下一个pbcopy
命令到bind
:
bind -x '"\C-xc":pbcopy <<<"$READLINE_LINE"'
现在,在按下&#34; CTRL-X c&#34;之后,你输入bash的任何内容将被复制到剪贴板中。
如果你不喜欢序列,你也可以在Terminal.app中设置sequince - &gt;偏好 - &gt;设置 - &gt;键盘如下一个screeenshot
我绑定了&#34; CTRL-X c&#34; \030c
到 CTRL - ALT - LEFT_ARROW ,所以现在我有两个绑定。
答案 4 :(得分:0)
您可以使用历史记录文件来执行此操作。让你的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"