web-dev-qa-db-ja.com

選択範囲をtmuxのクリップボードにコピーする

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

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

マウスバインディングがあると思った(MouseOnSelectionのようなMouseDown1Pane)ですが、ウェブ上で役立つものを見つけることができませんでしたman tmux

Ubuntu 16.10で、できればGnome端末で同様の動作をさせる方法はあるのでしょうか。

私のtmuxドットファイルは利用可能です ここ(リンク)

26

Tmux 2.4+とviコピーモードバインディングおよび xclip

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でデフォルトでサポートおよび有効化されている場合があり(tmuxマニュアルのset-clipboardを参照)、そこでの動作を説明します。

次に、コピーモードMouseDragEnd1Pane "key"をバインドできます。つまり、ペイン内でクリックしてドラッグした後、最初のマウスボタンが離されたときに、現在のコピーモードの選択(デフォルトのバインドによって行われる)をとるtmuxコマンドにバインドします。 for MouseDrag1Pane)をパイプしてシェルコマンドに渡します。このtmuxコマンドは、tmux 2.4より前はcopy-pipeで、それ以降 変更 からsend-keys -X copy-pipe[-and-cancel]に変更されました。シェルコマンドについては、システムクリップボードの内容をパイプ処理されたものに設定するものが必要です。 xclipは、次のコマンドでこれを行うために使用されます。 X以外のプラットフォームでの以下の"xclip -selection clipboard -i"の同等の置き換えは "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オプションをonに設定することにより、マウスドラッグのサポートがTmux 1.3で最初に追加された後にコピーします。 Tmux 2.1は、マウスサポートをおなじみのマウスキーバインディングに変更しましたが、2.2で導入されたDragEndバインディングがありませんでした。したがって、2.2より前では、マウスドラッグでシステムクリップボードを設定する唯一の方法は、xtermエスケープシーケンスの組み込みの使用(set-clipboardオプション)を使用することでした。これは、GNOMEターミナルなど、set-clipboardをサポートしていないターミナルでドラッグアンドコピー動作を実現するには、少なくともtmux 2.2に更新する必要があることを意味します。

48
Josh Brobst

受け入れられた回答の拡張として、マウスボタンを離したときに邪魔になるとコピーモードが終了することがよくあります(これがcopy-pipe-and-cancelで発生します)。参照: https://github.com/tmux/tmux/issues/14 。したがって、新しいtmux(私は2.6を使用)では、copy-pipeclear selectionと一緒に使用して選択にコピーできますが、コピーモードは終了しません。

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

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

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

Ubuntu 18.04.1tmux 2.6でテストしました。

ソース: https://forum.upcase.com/t/tmux-ctrl-shift-c-and-ctrl-shift-v-bindings/1208

2
Dušan Maďar

両方の回答を拡張して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
2
Shawn Hoover