首页 > 解决方案 > 在远程会话中使用 tmux 选择鼠标后复制到客户端剪贴板

问题描述

这是我的 .tmux.conf

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

在本地的 linux 机器上运行良好。鼠标选择会自动复制到系统剪贴板。

但是,在远程会话(iTerm + Mac)中,它不起作用。文本不会复制到客户端的系统剪贴板。显然我必须使用 OSC 52。这是一个帮助脚本

您可以像这样使用脚本:

echo "whatever text" | osc52.sh

现在“任何文本”都被复制到客户端的系统剪贴板。

但是我无法让脚本与 tmux 鼠标选择一起使用:

setw -g mouse on
set-option -s set-clipboard off
osc52="~/osc52.sh"
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "$osc52"

任何帮助表示赞赏。谢谢!

标签: sshcopy-pastetmuxiterm

解决方案


这不是使用 OSC 52 的方法。您不能从脚本发送它 - 从复制管道运行的命令的所有输出都将被忽略。

相反,您需要配置 tmux 本身来执行此操作。尝试以下操作:

1)删除绑定键命令,只保留 MouseDragEnd1Pane 作为默认值,即复制选择。

2) 将 set-clipboard off 更改为 set-clipboard on。请记住在更改 .tmux.conf 后完全重新启动 tmux。

3) 确保 tmux 外部的 TERM 是 xterm 或 xterm-256color,以便 tmux 从默认的终端覆盖中添加 Ms 功能。这应该是 iTerm2 中的默认设置。确保您没有从 .tmux.conf 中的终端覆盖中删除它。

4)在iTerm2中,我认为你需要打开这个选项,“终端中的应用程序可以访问剪贴板”:

在此处输入图像描述


推荐阅读