将shell命令的输出直接插入到tmux窗格中

时间:2016-02-19 15:41:49

标签: shell copy-paste tmux

我的目标是在linux中复制中间鼠标复制粘贴功能。

我可以通过以下方式在窗格中显示此剪贴板的输出:

32767

我想直接将此输出插入到窗格中(即类似于bind-key -T root MouseDown2Pane run-shell "xclip -selection primary -o" ),但我没有看到将两个命令链接在一起的方法。

我正在运行tmux 2.1版。

2 个答案:

答案 0 :(得分:5)

这可以通过将shell命令的输出重定向到(临时文件),然后使用tmux load-bufferpaste-buffer命令将该文件的内容直接插入到窗格中来实现:< / p>

bind-key -T root MouseDown2Pane run-shell "xclip -selection primary -o >~/.tmux-buffer-tmp" \; load-buffer -b tmp-copy-buffer ~/.tmux-buffer-tmp \; paste-buffer -b tmp-copy-buffer -d \; run-shell -b "rm ~/.tmux-buffer-tmp"

解释每一步:

  • run-shell "xclip -selection primary -o >~/.tmux-buffer-tmp"使用xclip实用程序将剪贴板的内容插入临时文件
  • load-buffer -b tmp-copy-buffer ~/.tmux-buffer-tmp将上述文件的内容加载到tmux缓冲区
  • paste-buffer -b tmp-copy-buffer -d将这些内容direty粘贴到活动窗格中(并删除临时缓冲区,以便通过鼠标单击来保持缓冲区的状态不变)
  • run-shell -b "rm ~/.tmux-buffer-tmp"删除临时文件。

答案 1 :(得分:3)

另一种不需要临时文件的方法是:

bind-key -T root MouseDown2Pane run-shell 'tmux set-buffer -b x-clip "$(xsel -op)"' \; paste-buffer -b x-clip -d

分解:

  • bind-key -T root MouseDown2Pane:绑定到鼠标中键点击根密钥表中的一个窗格(当你不处于复制模式并且没有按下前缀时适用)
  • run-shell 'tmux set-buffer -b x-clip "$(xsel -op)"':这有点hacky,但它在shell中使用另一个tmux命令运行set-buffer tmux命令。这样我们就可以扩展xsel命令的输出以获取剪贴板内容
  • paste-buffer -b x-clip -d:粘贴缓冲区的内容,并将其删除。

另一种方法:

bind-key -T root MouseDown2Pane run-shell 'xclip -o | tmux load-buffer -bxclip -' \; paste-buffer -bxclip -d