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する必要があった。