首页 > 解决方案 > Tmux:如何在嵌套的远程 ssh 会话和本地机器之间复制文本

问题描述

我在本地有连接到多个远程 tmux 会话的 tmux 会话。

我无法弄清楚如何从这些远程 tmux 会话和本地机器复制文本。

神秘的是,打开一个远程 ssh 会话(不嵌套在本地 tmux 中)是有效的。

基本上,如果我启动一个 ssh 会话并附加到远程 tmux,那么一切正常(复制/粘贴)。另一方面,如果我启动本地 tmux 然后 ssh 到远程系统并附加到它的 tmux 会话,那么我无法从该远程会话复制到本地机器(我在 Catalina/MacOS 上)。这对我来说似乎很奇怪。

标签: macossshtmux

解决方案


我假设您的意思是在 tmux 中使用复制模式复制文本?

tmux 可以使用 OSC 52 转义序列设置主机剪贴板,但它需要知道外部终端支持这一点,并且需要将外部终端配置为允许它。

只有一个 tmux,您可能有TERM=xterm外部 tmux 和一个默认允许这样做的终端,因此它无需任何配置更改即可工作。

但是,对于两个 tmux,内部 tmux 将具有TERM=screenorTERM=tmux和一个默认情况下不允许这样做的外部终端(外部 tmux)。

因此,要使其正常工作,您需要做两件事:

1) 配置外部 tmux 以允许剪贴板由内部程序设置set -g set-clipboard on(不要忘记在更改 .tmux.conf 后完全重新启动 tmux,或者也从命令提示符执行此操作)。

2) 配置内部 tmux 以在外部终端也是 tmux 时设置剪贴板,方法是Ms向终端覆盖添加一个条目(如果您有内部 tmux,则更screen*改为) :。如果您不重新启动它,您将需要在执行此操作后分离并重新连接 tmux。tmux*TERM=tmuxset -as terminal-overrides ',screen*:Ms=\\E]52;%p1%s;%p2%s\\007'

如果内部 tmux 非常旧,您可能也需要这样做set -g set-clipboard on


推荐阅读