这仅在 iTerm 中有效(将日期和时间放在剪贴板中):
printf "\e]1337;Copy=:$(date | base64)\a"; echo $(pbpaste)
这适用于本地运行的 tmux(使用 DCS 直通):
printf "\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\\"; echo $(pbpaste)
这适用于远程运行的 tmux:
printf "\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\\"; echo $(ssh -p 2222 -qt localhost pbpaste)
我唯一的问题是在本地 tmux 下远程运行 tmux:
printf "\ePtmux;\e\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\\\e\\"; echo $(ssh -p 2222 -qt localhost pbpaste)
我认为问题是内部\e\\
被解释为外部\e\\
。
是否有某种方法可以逃避内部\e\\
,使其正确地成为外部 tmux?
您需要将每个 tmux 的每个 \e 加倍,包括终止 \e\\ 中的 \e,所以:
或者,如果您将 tmux 配置为使用 OSC 52,然后在 iTerm2 中打开它(“终端中的应用程序可以通过快速搜索访问剪贴板”),它将通过每个 tmux(在每个中创建一个粘贴缓冲区)到主机剪贴板。对于 tmux,您将需要以下内容:
然后您可以在最里面的 tmux 中执行此操作:
当然,这意味着您在 tmux 中复制的任何内容也将进入您可能不想要的主机剪贴板。