配置 tmux 复制模式以将副本转储到系统剪贴板中

Configure tmux copy mode to also dump a copy into the system clipboard

使用多个窗格时,使用 tmux 复制模式 (ctrl+b [) 可以很方便地使用窗格感知复制。但是,复制模式复制到 tmux 复制缓冲区,而不是系统剪贴板。理想情况下,我希望副本也能自动复制到系统剪贴板中。

一个基本的起点是将这个别名添加到我的 bashrc 中:

在我使用复制模式复制后,我 运行 别名和文本被复制到我的剪贴板中!工作起来很有魅力,但总是需要一个额外的手动步骤。

如果该别名可以作为我在 tmux 中配置的一种 "post tmux copy hook" 触发,那就太理想了。

我能想到的最好的事情是我 ~/.tmux.conf:

中的这一行
bind-key    -T copy-mode    MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xsel -i -b"

# similarly, I believe only needed for keyboard based copies:
bind-key    -T copy-mode    C-w   send-keys -X copy-pipe-and-cancel "xsel -i -b"
bind-key    -T copy-mode    M-w   send-keys -X copy-pipe-and-cancel "xsel -i -b"

这会导致 任何 基于鼠标的 selection(注意:我更喜欢鼠标 selection 而不是基于键盘的 selection)触发将 selection 的副本复制到我的系统剪贴板中。烦人的是,它总是会发生,也就是说,不仅在复制模式下,任何时候我 select 它都会发生。这在实践中非常敏感,只需用我的鼠标点击 window 给它焦点通常已经不小心触发了一个小的 selection (经常不小心覆盖我剪贴板中的现有内容,导致我有时会粘贴与预期完全不同的内容)。

我搜索了很多类似的问题,但没有找到满意的答案。我真的希望找到一种方法来获得一种 "post tmux copy hook",我可以在其中插入我的复制到剪贴板命令。

我使用 Ubuntu 18.04,tmux 2.6。另请注意,我在 ~/.tmux.conf:

中使用鼠标模式
set -g mouse on

如有任何帮助,我们将不胜感激。我已经想要这个好几个月了,我所有的恢复努力都只是浪费了时间:(

如果您不希望 tmux 在窗格上拖动时进入复制模式,则在根目录中取消绑定 MouseDrag1Pane table (unbind -n MouseDrag1Pane)。