Tmux

如何將嵌套 tmux 會話中的轉義序列發送到 iTerm2?

  • December 11, 2019

這僅在 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 中複製的任何內容也將進入您可能不想要的主機剪貼板。

引用自:https://unix.stackexchange.com/questions/556738