如何在 Linux 上的 xterm 中的 Tmux 中从系统剪贴板复制/粘贴?

如何在 Linux 上的 xterm 中的 Tmux 中从系统剪贴板复制/粘贴?

我想在 Tmux 中进行选择时从系统(X11)剪贴板复制和粘贴,并且我想将这些操作绑定到鼠标;左键单击复制,中键单击粘贴。

答案1

对于旧版本的 Tmux (<1.5) 或其他系统,请尝试tmux-yank。然而,对于这种特定情况,Tmux 与系统集成得非常好。

在您的 中~/.tmux.conf添加:

set -g mouse on
set -g set-clipboard external
bind -T root MouseUp2Pane paste

启用鼠标支持,复制到系统剪贴板,并绑定在窗格上单击鼠标中键进行粘贴。

在你的~/.Xresources

xterm*selectToClipboard: true
xterm*disallowedWindowOps: 20,21,SetXProp

让 Xterm 也选择系统剪贴板,并允许 Tmux 修改剪贴板(“窗口操作”)。

然后,要将更改应用到您的~/.Xresources,请运行xrdb -merge ~/.Xresources并重新启动 Xterm 和 Tmux。


为了支持 macOS 和 Windows Subsystem for Linux (WSL),我们可以添加

run-shell $HOME/.tmux.conf.sh

~/.tmux.conf,然后创建~/.tmux.conf.sh以下内容:

#!/bin/bash

bind_copy=(bind-key -T copy-mode-vi MouseDragEnd1Pane)

# `tmux_bind_copy pbcopy` will make selecting with the mouse (and then
# releasing the selection) in tmux pipe the selection to `pbcopy`
function tmux_bind_copy {
        tmux "${bind_copy[@]}" send-keys -X copy-pipe-and-cancel "$@"
}

if [[ "$(uname)" == "Darwin" ]]
then
    # Copy with pbcopy on macOS
    tmux_bind_copy pbcopy
fi

if [[ ! -z "$WSL_DISTRO_NAME" ]]
then
    # copy with Windows' clip.exe on WSL
    tmux_bind_copy /mnt/c/Windows/System32/clip.exe
fi

请注意,可以在中进行其他“高级”配置选择.tmux.conf.sh,例如根据当前主机名、分布等设置配置值;使用if-shell也是一种选择,但在实践中通常很笨拙,因此使用 shell 脚本是可接受的解决方案

还要注意奇怪的语法"${bind_copy[@]}",它插入$bind_copy 大批无需进行全局扩展。

答案2

我正在使用$tmux -Version tmux 2.8。在复制到剪贴板之前,诀窍是提前按下 shift 并先绘制区域(您要复制到系统剪贴板的区域),该区域会获得灰色文本背景。

然后按默认热键复制到系统剪贴板。我正在使用Konsole,它就在那里Shift-Ctrl-C

相关内容