選択をtmuxのクリップボードにコピーします


22

macOSのiTerm2のtmuxでマウスでテキストを選択すると、選択したテキストがクリップボードにコピーされます。余分なボタンをクリックする必要はありません-必要なテキストを選択するだけで完了です。

macOSのterminal.appでtmuxをテストしましたが、そこでは動作しません- y選択をクリップボードにコピーするにはヒットする必要があります。

マウスバインディング(にMouseOnSelection似たようなものMouseDown1Pane)があると考えましたが、Webやで有用なものを見つけることができませんでしたman tmux

Ubuntu 16.10-できればGnomeターミナルでも同様の動作をする方法があるのだろうか。

私のtmuxドットファイルはこちら(リンク)から入手できます

回答:


44

viコピーモードバインディングとxclipを備えたTmux 2.4以降

set-option -g mouse on
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -se c -i"

古いtmuxバージョン、emacsコピーモードバインディング(デフォルト)、または非Xプラットフォーム(つまり、xclipなし)については、以下の説明を参照してください。


説明:まず、tmuxがマウスをキャプチャし、マウスイベントをバインドできるように、マウスオプションを有効にする必要があります。

set-option -g mouse on

Gnome-terminalは、xtermエスケープシーケンスを使用したクリップボードの設定をサポートしていないため、set-clipboardオプションがオフであることを確認する必要があります。

set-option -s set-clipboard off

このオプションは、iTerm2でデフォルトでサポートおよび有効化されている場合があり(set-clipboardtmuxマニュアルを参照)、そこでの動作を説明します。

次に、コピーモードMouseDragEnd1Pane「キー」、つまり、ペインでクリックしてドラッグした後に最初のマウスボタンを離したときに、現在のコピーモード選択(のデフォルトバインディングによって作成されたMouseDrag1Pane)をパイプ処理するtmuxコマンドにバインドできますシェルコマンドに。このtmuxコマンドはcopy-pipetmux 2.4の前にあり、その後に変更されましたsend-keys -X copy-pipe[-and-cancel]。シェルコマンドについては、システムクリップボードの内容をパイプされたものに設定するものが必要です。xclipは、次のコマンドでこれを行うために使用されます。"xclip -selection clipboard -i"非Xプラットフォームでの以下の同等の代替は、"wl-copy"(Wayland)、"pbcopy"(macOS)、"clip.exe"(Windows、WSL)、および"cat /dev/clipboard"(Cygwin、MinGW)です。

Tmux 2.4+:

# For vi copy mode bindings
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

Tmux 2.2から2.4:

# For vi copy mode bindings
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"

tmux 2.2より前:

マウスドラッグ後のコピーのサポートは、新しいmode-mouseオプションをに設定することにより、元々Tmux 1.3で追加されましたon。Tmux 2.1は、マウスサポートを使い慣れたマウスキーバインディングに変更しましたが、バインディングはなくDragEnd、2.2で導入されました。したがって、2.2以前は、マウスドラッグでシステムクリップボードを設定する唯一の方法は、組み込みのxtermエスケープシーケンス(set-clipboardオプション)を使用することでした。これは、set-clipboardGNOME端末など、サポートしていない端末のドラッグアンドコピー動作を取得するには、少なくともtmux 2.2に更新する必要があることを意味します。


3
この高品質の回答が、ついにすべてクリックしてくれた理由です。ありがとうございます!
チャウビン

2
彼らは、端末の機能とOPで述べたように、デフォルトの方法を変更したので、Mac上でこれを実行しようとしている人のために動作しなくなります(私は、自身のコピーバッファを持つ屏風を使用しています):交換するxclip...シンプルで陳述することはpbcopyありませんトリック。
ダレルホルト

このスレッドのソリューションはどれも私にとってはうまくいきません。
ヤンキー

1
こんにちはJosh、〜/ .tmux.confをソースファイルにしたとき、判明しました:Unknown key: MouseDragEnd1Pane
Xifeng Li

@XifengLiどのtmuxバージョンとOSを使用していますか?DragEndキーには少なくともtmux 2.2が必要だと思います。
ジョシュブロブスト

8

受け入れられた答えの拡張として、多くの場合、マウスボタンを放すと邪魔になるとコピーモードが終了することがわかります(これはで起こりますcopy-pipe-and-cancel)。https://github.com/tmux/tmux/issues/140を参照してください。したがって、新しいtmux(2.6を使用)ではcopy-pipe、with clear selectionを使用して選択範囲にコピーできますが、コピーモードは終了しません。

bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection clipboard -i" \; send -X clear-selection

2

両方の回答を拡張して、msys2からWindowsクリップボードにコピーします(および選択を解除します)。

# For vi copy mode bindings
bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection
# For emacs copy mode bindings
bind -Tcopy-mode MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection

いい視点ね。自分でコピーモード(emacsスタイル)を使用しているため、テスト後に独自の構成を貼り付けました。回答を更新し、受け入れられた回答のように両方を含めるようにしました。
ショーンフーバー

0

さらに別の拡張機能は、Shiftキーの使用に関するものです。

Shiftマウスでテキストを選択しながら押し続けます。これで、標準の右クリックメニューが表示されます(押し続けるか、Shiftもう一度押します)。とを使用Ctrl+Shift+CCtrl+Shift+Vてコピーアンドペーストできます。コピーされたテキストは、システムクリップボードでも使用できます。

上でテストUbuntu 18.04.1してtmux 2.6

出典:https://forum.upcase.com/t/tmux-ctrl-shift-c-and-ctrl-shift-v-bindings/1208

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.