tmuxのcopy-pipeで少しすっきり
tmuxを使っていてちょっと困るのがクリップボード周りの処理で、クリップボードと連携させるにはtmuxのコピーバッファを一時ファイルに吐き出して、それをOS側のクリップボードツールに取り込むというような面倒なことしないといけませんでした。
tmux1.8で、copy-pipeというものが導入されてこの辺がすっきりしました。
1.8以前の仕組み
1.8以前は、冒頭に書いたような一時ファイルを挟んでクリップボードとやりとりしていました。
Macの設定だと、以下の様なことをしていました。
- ~/.tmux.conf
[code]
set-option -g default-command "reattach-to-user-namespace -l $SHELL"
bind C-c run-shell "tmux-pbcopy"
bind C-y run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer – && tmux paste-buffer"
[/code] -
tmux-pbcopy
[code lang=”shell”]
/usr/local/bin/tmux save-buffer $HOME/.tmux_to_pbcopy
cat $HOME/.tmux_to_pbcopy | reattach-to-user-namespace pbcopy
[/code]
要は、run-shellでtmux-pbcopyシェルを呼んで、その中でsave-bufferでtmuxのバッファを取り出して.tmux_to_pbcopyに書き出し。
その内容をOSXのクリップボードツールpbcopyに渡してクリップボードにコピーさせる、というものです。
漂う強引な感じ。
1.8だと
1.8のcopy-pipeを使うと以下のようになります。
[code]
set-option -g default-command "reattach-to-user-namespace -l $SHELL"
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
bind C-y run-shell "reattach-to-user-namespace pbpaste | tmux load-buffer – && tmux paste-buffer"
[/code]
copy-pipeを使うと、コピーした内容をそれに続くコマンドに渡してくれるので、直接pbcopyコマンドに渡せます。
これで、一時ファイルに書き出したりしなくてもすっきりクリップボードにコピーできます。
Leave a comment