ぶていのログでぶログ

思い出したが吉日

tmuxで選択部分をクリップボードに追加していく

普段tmuxを使っていて、例えば以下のようなときに🌟部分だけをコピーして貼り付けたいとする。

$ command1 🌟
foo        🌟
bar        🌟
foo        🌟
bar        🌟

$ commmand2
commmand2: command not found

$ command2 🌟
hoge       🌟
huga       🌟

愚直に全部コピーしてエディタにペーストして不要部分を削除する。 そんな感じでやってもいいのだけど流石にめんどくさいのでなんとかしたい。 なので、tmux.confに以下のような設定を入れた

# Macの場合はxselをpbcopyにする
bind -T copy-mode-vi a send -X append-selection \; run 'tmux show-buffer -b $(tmux list-buffers -F "##{buffer_name}" | head -1) | xsel -ib'
bind -T copy-mode-vi y send -X copy-selection \; send -X clear-selection

copy-modeのappend-selectionは選択範囲を最新のbufferに追記する。 set-clipbaord on になっているとクリップボードにコピーされるのだけど、このときは選択範囲部分しかクリップボードに反映されない。 なので、最新のbufferをshow-bufferで表示しコマンドを通してクリップボードにコピーしている。

ただし、append-selectionは最新のbufferに追記するので、例えば、前回コピーした内容に追記してしまうみたいなことが起こる。 そこで、copy-modeで一番はじめにコピーする場合はyキーを押して新しいbufferを作ってからappendするようにしている。

ちょっとした設定だけどなかなか便利な感じがしている。


余談 当初はxclipコマンドを使っていたのだけど、なぜかxclipがstdinを取れなくなってtmuxごと固まるみたいなことが起こった…。 詳しく原因は調べていないけど、xselとxclipでなにか違いがあるのだろうか…。