2016-02-19 94 views
3

我的目标是在linux中复制鼠标中间复制粘贴功能。将shell命令的输出直接插入到tmux窗格中

我可以在一个窗格中显示通过此剪贴板的输出:

bind-key -T root MouseDown2Pane run-shell "xclip -selection primary -o" 

我想直接将这个输出到窗格(即类似于send-keys),但我不明白的方式将两个命令链接在一起。

我正在运行tmux版本2.1。

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" 

解释:

回答

3

这可通过外壳命令的输出重定向到(临时文件),然后使用TMUX load-bufferpaste-buffer命令插入该文件的内容直接进入窗格来实现各步骤:

  • 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"去除临时文件。
+0

除了中间的按钮粘贴小学,我也用这个mehod绑定'CONTROL + v'粘贴剪贴板:'绑定键-T根Cv运行shell ....' – starfry

1

另一种方法可以做到这一点并不需要一个临时文件是:

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)"':这是一个小黑客,但它运行了set-buffer tmux命令一个带有另一个tmux命令的shell。这样我们可以扩展命令xsel的输出以获得剪贴板内容
  • paste-buffer -b x-clip -d:粘贴缓冲区的内容并将其删除。

另一种方式来做到这一点:

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