エンジニアになりたい

エンジニアです

Linuxでtmuxのコピー結果をクリップボードにコピーする

いろんな記事を探していたがどうしても出来なかったので共有する。

とは言っても、すごく単純な問題だったような気がする。どうしても出来ない!って人の助けになればと思う。

結論から言うと、以下を .tmux.conf に記述すると出来る。tmuxのキーバインドはデフォルトのままである。

unbind -t emacs-copy M-w
unbind -t emacs-copy C-w
bind-key -t emacs-copy M-w copy-pipe "xsel -bi"
bind-key -t emacs-copy C-w copy-pipe "xsel -bi"

説明

ubind

unbind コマンドで emacs-copy コマンドに割当られているキーバインドを解除している。

bind-key

今度は逆に bind-key コマンドで キーバインドemacs-copy コマンドに割り当てている。

copy-pipe

copy-pipe コマンドはコピーモード中にセレクションをコピーして、次のコマンドに渡す。コピーモードでコピーした結果を xsel -lib に渡してクリップボードにコピーしている。tmux1.8以上から出来るようになった。

XSel

xselコマンドラインからXセレクションを操作するツールである。Xセレクションとはいわゆるクリップボードの機能のことであり、PRIMARY、SECONDARY、CLIPBOARDの3種類がある。

PRIMARYは選択した時にその部分が格納されるバッファで、CLIPBOARDはコピーした時に格納されるバッファらしい。SECONDARYは一般的なアプリケーションでは使われないようである。-b オプションでクリップボードセレクションを使うようにし、-i オプションで標準入力をセレクションに読ませる。

xselはtmuxと別途インストールする必要がある。

今まで出来なかったと思われる理由

.tmux.confの設定が反映されていなかった

今思うと古いtmuxのプロセスが残っているせいで設定が反映されていない可能性があった。tmuxのプロセスを殺して起動し直すと良い。

$ ps aux | grep tmux
$ kill "ID"

unbindしていなかった

いろんな記事でcopy-pipeを使う方法は書いてあった。しかし私の場合はその前にコピーコマンドをunbindする必要があった。