これは、xclipを使用してリモート(ssh)tmuxセッションからバッファーをコピーすることに関する2つの主要な問題を解決する、かなり長い回答です。
1.応答しないxclip
私にとって、@ Grauwolfの答えはxclip
うまくいきませんでした(tmuxペインが完全に無反応になります)。Arch wikiのTmuxページでその理由を見つけました:
xclipは、この目的にも使用できます。xselとは異なり、現在のロケールに適合しない生のビットストリームを印刷するのに適しています。それでも、xclipはtmuxのバッファーから読み取った後、STDOUTを閉じないため、xclipの代わりにxselを使用する方が適切です。そのため、tmuxはコピータスクが完了したことを認識せず、xclipの終了を待機し続けるため、tmuxは応答しなくなります。回避策は、xclipのSTDOUTを/ dev / nullにリダイレクトすることです
したがって、バインディングは次のようになります。
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
これで、tmuxセッションがローカルの場合に機能します。
2. xclipがXに接続できない
ssh -Xでtmuxを使用している場合、これが直接機能しない可能性があります。
これは、シェル変数を$DISPLAY
適切に設定する必要があるためです。
完全なソリューション
だから、私にとって、完全な実用的なソリューションは、次の行をmyに入れること~/.tmux.conf
です:
set-option -g update-environment "DISPLAY"
bind-key C-y run "export DISPLAY=`tmux show-env | sed -n 's/^DISPLAY=//p'`; tmux save-buffer - | xclip -i -selection clipboard >/dev/null"
# Or more concise:
bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's/^DISPLAY=//p'` >/dev/null
プライマリから貼り付ける場合:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
$DISPLAY
ソーシング中に正しく設定されない理由が 完全には理解されていない.tmux.conf
ため、tmux show-env
andで抽出する必要がありsed
ます。
tmuxが1.8以上の場合、次のコマンドでこのコマンドを調整できますcopy-pipe
。
bind-key -t vi-copy y copy-pipe 'xclip -in -selection clipboard -d `tmux show-env | sed -n s/^DISPLAY=//p` >/dev/null'