Tmux 复制管道与鼠标选择

Tmux 复制管道与鼠标选择

copy-pipe在 OS X 上使用 Tmux 1.8 共享系统剪贴板:

unbind -t vi-copy Enter
bind -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

这在进入选择模式并复制文本(选择文本,然后点击Enter)时有效,但在使用鼠标选择文本时无效。是否可以设置一个在鼠标选择后应运行的命令,就像copy-pipe在点击 后运行一样?即我需要在选择离开时Enter运行。reattach-to-user-namespace pbcopy

答案1

没有内置方法来自定义“鼠标向上”行为以结束由鼠标启动的选择。有关详细信息,请参阅标签reset_modewindow_copy_mouse()window-copy.c(链接来源tmux1.8);具体来说,这段代码中没有提到窗口、会话或服务器选项。

有一个解决方法,但可能有点特殊情况:

  • copy-pipe在释放鼠标按钮之前激活绑定(例如按 Enter)。
    这将运行您的 shell 命令,将选择复制到缓冲区,然后退出复制模式(即 的通常行为copy-pipe)。

不过有一个小副作用:

  • 当您最终释放按钮时,终端将发送鼠标事件,这将导致tmux重新进入复制模式。您需要手动退出(例如 Escape 或 Cc)此“额外”复制模式。
    这可能被视为错误(input_mouse()在开始新的复制模式之前不检查鼠标事件是否为“按钮向上”事件);但是,这基本上是无害的(除了必须退出第二个复制模式实例的不便之外)。

答案2

对于 tmux 2.2 及更高版本使用:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"

相关内容