我想在 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
。