Tmux
如何將嵌套 tmux 會話中的轉義序列發送到 iTerm2?
這僅在 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,所以:
printf "\ePtmux;\e\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\e\\\e\\"
或者,如果您將 tmux 配置為使用 OSC 52,然後在 iTerm2 中打開它(“終端中的應用程序可以通過快速搜尋訪問剪貼板”),它將通過每個 tmux(在每個中創建一個粘貼緩衝區)到主機剪貼板。對於 tmux,您將需要以下內容:
set -as terminal-overrides ',tmux*:Ms=\\E]52;%p1%s;%p2%s\\007' set -as terminal-overrides ',screen*:Ms=\\E]52;%p1%s;%p2%s\\007' set -s set-clipboard on
然後您可以在最裡面的 tmux 中執行此操作:
printf "\033]52;$(date)\007"
當然,這意味著您在 tmux 中複製的任何內容也將進入您可能不想要的主機剪貼板。