将选择内容复制到 tmux 中的剪贴板

将选择内容复制到 tmux 中的剪贴板

如果我在 macOS 上的 iTerm2 中用鼠标在 tmux 中选择文本,我会将所选文本复制到剪贴板中。我不必单击任何额外的按钮 - 只需选择您想要的文本即可完成。

我已经在 macOS 上的terminal.app 中测试了 tmux,但它在那里不起作用 - 我必须点击y才能将所选内容复制到剪贴板。

我认为有一个鼠标绑定(类似于MouseOnSelectionMouseDown1Pane,但我在网络和 上找不到任何有用的东西man tmux

我想知道是否有办法在 Ubuntu 16.10 上实现类似的行为 - 最好是在 Gnome 终端中。

答案1

Tmux 2.4+ 与 vi 复制模式绑定和剪辑

set-option -g mouse on
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

对于较旧的 tmux 版本、emacs 复制模式绑定(默认)或非 X 平台(即无 xclip),请参阅下面的说明。


说明:首先,我们需要启用鼠标选项,以便 tmux 捕获鼠标并让我们绑定鼠标事件:

set-option -g mouse on

Gnome-terminal 不支持使用 xterm 转义序列设置剪贴板,因此我们应该确保该set-clipboard选项处于关闭状态:

set-option -s set-clipboard off

iTerm2 上默认支持并启用此选项(请参阅set-clipboardtmux 手册),这将解释那里的行为。

然后,我们可以将复制模式MouseDragEnd1Pane“key”(即,在窗格中单击并拖动后释放第一个鼠标按钮时)绑定到 tmux 命令,该命令采用当前复制模式选择(由默认绑定进行MouseDrag1Pane)并将其通过管道传输到 shell 命令。这个 tmux 命令是copy-pipe在 tmux 2.4 之前的,并且从那时起改变了send-keys -X copy-pipe[-and-cancel]。至于 shell 命令,我们只需要一些东西来将系统剪贴板的内容设置为通过管道传递给它的内容; xclip 用于在以下命令中执行此操作。"xclip -selection clipboard -i"以下在非 X 平台上的一些等效替代品是"wl-copy"(Wayland)、"pbcopy"(macOS)、"clip.exe"(Windows、WSL) 和"cat /dev/clipboard"(Cygwin、MinGW)。

Tmux 2.4+:

# For vi copy mode bindings
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

Tmux 2.2 至 2.4:

# For vi copy mode bindings
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"

tmux 2.2 之前:

鼠标拖动后复制支持最初是在 Tmux 1.3 中通过将新mode-mouse选项设置为 来添加的on。 Tmux 2.1 将鼠标支持更改为熟悉的鼠标键绑定,但没有DragEnd2.2 中引入的绑定。因此,在 2.2 之前,我相信在鼠标拖动时设置系统剪贴板的唯一方法是通过内置使用 xterm 转义序列(选项set-clipboard)。这意味着需要至少更新到 tmux 2.2 才能获得不支持的终端set-clipboard(例如 GNOME 终端)的拖放行为。

答案2

另一个扩展是关于使用Shift密钥的。

Shift用鼠标选择文本时按住。现在您将获得标准的右键单击菜单(按住或Shift再次按下),您可以使用Ctrl+Shift+CCtrl+Shift+V进行复制和粘贴。复制的文本也可以在系统剪贴板

测试Ubuntu 18.04.1tmux 2.6.

来源:https://forum.upcase.com/t/tmux-ctrl-shift-c-and-ctrl-shift-v-bindings/1208

答案3

作为已接受答案的扩展,人们经常发现释放鼠标按钮退出复制模式时令人不安(这就是 发生的情况copy-pipe-and-cancel)。看:https://github.com/tmux/tmux/issues/140。因此,在较新的 tmux(我使用 2.6)中,我们可以copy-pipe与 一起使用clear selection来复制到选择但不退出复制模式:

bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection clipboard -i" \; send -X clear-selection

答案4

添加到上面的答案,这对我在Mac上有用。使用 xclipboard 在我的情况下不起作用。

bind -T copy-mode-vi  MouseDragEnd1Pane   send-keys -X copy-pipe-and-cancel pbcopy

相关内容