macos - Tmux:如何在嵌套的远程 ssh 会话和本地机器之间复制文本
问题描述
我在本地有连接到多个远程 tmux 会话的 tmux 会话。
我无法弄清楚如何从这些远程 tmux 会话和本地机器复制文本。
神秘的是,打开一个远程 ssh 会话(不嵌套在本地 tmux 中)是有效的。
基本上,如果我启动一个 ssh 会话并附加到远程 tmux,那么一切正常(复制/粘贴)。另一方面,如果我启动本地 tmux 然后 ssh 到远程系统并附加到它的 tmux 会话,那么我无法从该远程会话复制到本地机器(我在 Catalina/MacOS 上)。这对我来说似乎很奇怪。
解决方案
我假设您的意思是在 tmux 中使用复制模式复制文本?
tmux 可以使用 OSC 52 转义序列设置主机剪贴板,但它需要知道外部终端支持这一点,并且需要将外部终端配置为允许它。
只有一个 tmux,您可能有TERM=xterm
外部 tmux 和一个默认允许这样做的终端,因此它无需任何配置更改即可工作。
但是,对于两个 tmux,内部 tmux 将具有TERM=screen
orTERM=tmux
和一个默认情况下不允许这样做的外部终端(外部 tmux)。
因此,要使其正常工作,您需要做两件事:
1) 配置外部 tmux 以允许剪贴板由内部程序设置set -g set-clipboard on
(不要忘记在更改 .tmux.conf 后完全重新启动 tmux,或者也从命令提示符执行此操作)。
2) 配置内部 tmux 以在外部终端也是 tmux 时设置剪贴板,方法是Ms
向终端覆盖添加一个条目(如果您有内部 tmux,则更screen*
改为) :。如果您不重新启动它,您将需要在执行此操作后分离并重新连接 tmux。tmux*
TERM=tmux
set -as terminal-overrides ',screen*:Ms=\\E]52;%p1%s;%p2%s\\007'
如果内部 tmux 非常旧,您可能也需要这样做set -g set-clipboard on
。