X環境のクリップボードやOS Xのペーストボードとtmuxのバッファを連携する方法
これはターミナルマルチプレクサAdvent Calendarの21日目です。20日目はid:tmatsuuの最近のbyobuの動向についてでした。つまり連チャンです。
screenやtmuxには、いわゆるクリックボードに相当するバッファという機能があります。通常はscreenやtmuxの中で完結する機能ですが、それぞれ読み込み/書き出しができるので、XのクリップボードやOS Xのペーストボードと連携することが可能です。
ここでは、各環境とtmuxを連携する方法を紹介します。
LinuxなどのX環境のクリップボードとtmuxを連携する方法
xclipコマンドを使うことで簡単に連携することができます。
bind-key C-c run "tmux save-buffer - | xcopy -i" bind-key C-v run "xcopy -o | tmux load-buffer - && tmux paste-buffer"
これで、
- tmuxでコピーモードを経由してtmuxのバッファにためる
- Ctrl-b Ctrl-cを押してtmuxのバッファからクリップボードへコピーする
- Ctrl-b Ctrl-vを押すと、クリップボードからtmuxのバッファにコピーしつつ貼りつける
が可能になります。最初の2つを1回の動作でできればよかったのですが、現在のtmuxでは難しいようです。
OS Xのペーストボードとtmuxを連携する方法
OS Xの環境ではペーストボードとの連携にpbcopy/pbpasteを使いますが、pbcopy/pbpasteが特殊な実装であるため、デフォルトのままではtmuxと連携ができません*1。
tmuxに対してパッチを当てることも可能ですが、追従するのも大変なのでここではGithubで公開されているラッパー、tmux-MacOSX-pasteboardの利用をオススメします。
tmux-MacOSX-pasteboardの使い方
ソースはGithubから取得します。git cloneしてmakeします。makeするためにはXcodeが必要です。
makeの結果、reattach-to-user-namespaceというコマンドが生成されますのでこれを任意の場所に設置しましょう。ここでは~/bin/に設置しています。
$ git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git $ cd tmux-MacOSX-pasteboard $ make $ ls -l reattach-to-user-namespace -rwxr-xr-x 1 matsuu staff 34548 12 20 22:34 reattach-to-user-namespace $ cp reattach-to-user-namespace ~/bin/
tmuxの設定
tmuxの起動時およびpbcopy/pbpaste実行時にreattach-to-user-namespaceをかませます。
set-option -g default-command "~/bin/reattach-to-user-namespace -l $SHELL" bind-key C-c run "tmux save-buffer - | ~/bin/reattach-to-user-namespace pbcopy" bind-key C-v run "~/bin/reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"
これでLinuxの場合と同様に、
- tmuxでコピーモードを経由してtmuxのバッファにためる
- Ctrl-b Ctrl-cを押してtmuxのバッファからペーストボードへコピーする
- Ctrl-b Ctrl-vを押すと、ペーストボードからtmuxのバッファにコピーしつつ貼りつける
が可能になります。