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

cmh*_*cmh 6 shell copy-paste tmux

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

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

bind-key -T root MouseDown2Pane run-shell "xclip -selection primary -o"
Run Code Online (Sandbox Code Playgroud)

我想直接将此输出插入窗格(即类似send-keys),但我没有看到将2个命令链接在一起的方法.

我正在运行tmux 2.1版.

Tha*_*yne 6

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

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

分解:

  • bind-key -T root MouseDown2Pane:绑定到根键表中窗格上的鼠标中键单击(当您未处于复制模式且未按前缀时适用)
  • run-shell 'tmux set-buffer -b x-clip "$(xsel -op)"':这有点 hacky,但它set-buffer在 shell 中运行 tmux 命令和另一个 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
Run Code Online (Sandbox Code Playgroud)


cmh*_*cmh 5

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

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 Code Online (Sandbox Code Playgroud)

解释每一步:

  • 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" 删除临时文件.