我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_mode
的window_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"