有没有办法复制当前写入的 bash 提示符内容?比如我写道:
ping www.google.com
这样终端中的行看起来如下:
petr@sova:~$ ping www.google.com
还没有按回车键。我想将该文本复制到剪贴板。可以吗?
通常的用例是多次点击并找到我想要复制的命令。
答案1
要剪切,请按ctrl+ u。要粘贴,请按ctrl+ y。这会将整行复制到 bash 剪贴板。如果您使用的是 X 和默认的 Ubuntu 终端,则可以使用鼠标标记内容,然后按ctrl+ shift+c进行复制,按ctrl+ shift+v进行粘贴。
答案2
#
在命令前面添加一个(这样它就变成了注释)- 运行
- 从历史记录中获取它并将其传送到剪贴板实用程序(如 xclip):
history | tail -n 1 | sed "s/[[:digit:]]* //" | sed "s/^#//" | xclip
答案3
不确定为什么所有答案都这么复杂,从 bash 4.0 开始,您可以使用访问当前内容$READLINE_LINE
。结合 xclip,您就有了现成的、可行的解决方案。将其添加到您的.bashrc
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard () {
printf %s "$READLINE_LINE" | xclip -selection CLIPBOARD
}
bind -x '"\C-y": copy_line_to_x_clipboard' # binded to ctrl-y
fi
对于 zsh
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard() {
echo -n $BUFFER | xclip -selection clipboard
zle reset-prompt
}
zle -N copy_line_to_x_clipboard
bindkey '^Y' copy_line_to_x_clipboard
fi
答案4
Vi模式解决方案
仅键盘解决方案。所有字符均按原样复制。开箱即用 - 纯 shell 解决方案,无依赖关系(显然除外xsel
)。
设置
- 在终端中设置 vi 选项:
set -o vi
。 - 别名复制未关闭此处文档:
alias c2c='cat - <<"" | tr -d '"'"'\n'"'"' | xsel -b'
用法
- 无需按 即可将您想要的任何内容写入命令行
<return>
。 - 按,
<escape>
然后按。整行现在应该会消失。要再次输入,请按。<d>
<d>
<i>
- 键入别名的名称(
c2c
在我的示例中)并按<return>
。 <escape>
按,<p>
然后按<return>
,<return>
。
好了。现在可以通过按<ctrl>+<v>
(GUI)或<ctrl>+<shift>+<v>
(合理的 CLI)将删除的文本粘贴到任何地方。如果您的 CLI 不合理,使之成为。
fzf 解决方案
有些人喜欢 vi 模式,有些人则不然。但我认为模糊查找器是必须的。它不允许做确切地正如您所要求的,它可以做得更好!fzf 可以以高出几个数量级的效率浏览命令历史记录,而不是“多次点击”。此外,它可以在我的c2c
别名中用于复制到剪贴板。目前无法很好地复制当前输入到终端的任何内容(没有鼠标),但如果某些内容在历史记录中,则只需几秒钟即可获取它。