tmuxのコピーをMacのクリップボードに同期する

Posted by @kachina_t on Sat, Oct 6, 2012
In Development
Tags development

ささやかだけど役にたつことなので、備忘録の意味も含めて投稿します。

Macでiterm2+zsh+tmux+vim環境で開発をしているのですが、コピー&ペーストが不便でした。

  • vimの場合
    ビジュアルモードで範囲指定して【y】でヤンクして、【p】でペースト

  • tmuxの場合
    【ctrl】+【b】→【[】でコピーモードに入り、【space】と【return】で範囲を指定しコピーして、【ctrl】+【b】→【]】でペースト

  • macの場合
    マウスで対象範囲を選択し【command】+【c】でコピーして、【command】+【v】でペースト

この マウスで対象範囲を選択 って操作がとてもストレスなので、
tmuxでコピーした内容をMacのクリップボードに同期する様にしてみました。

  1. reattach-to-user-namespaceのインストール
sudo brew install reattach-to-user-namespace
  1. コピースクリプトの作成
$ mkdir ~/bin
$ touch ~/bin/tmux-pbcopy
$ chmod 744 ~/bin/tmux-pbcopy

スクリプトの内容は以下のとおり。

#!/bin/sh
if ! type pbcopy >/dev/null 2>&1 || ! type reattach-to-user-namespace >/dev/null 2>&1; then
    tmux display-message "Error: cannot copy to clipboard."
    exit 0
fi

COPY=`tmux save-buffer -`
echo "$COPY" | reattach-to-user-namespace pbcopy

# メッセージ表示
LINES=`echo "$COPY" | wc -l | tr -d ' '`
tmux display-message "Copy: $LINES lines"
  1. tmux.confの編集

~/.tmux.confに以下を追記します。

# Ctrl-b yでコピー内容をMacのクリップボードに同期
unbind y
bind y run-shell '~/bin/tmux-pbcopy'

以上で、設定はおしまいです。
利用例は以下のとおりです。
【ctrl】+【b】→【[】でtmuxのコピーモードに入る
起点までカーソルを移動し【space】で範囲指定の開始
終点までカーソルを移動し【return】でtmuxのクリップボードにコピー
【ctrl】+【b】→【y】でコピーをMacのクリップボードに同期
【command】+【v】でペースト

これでエラーメッセージ等をコピペしてググるのがラクになりました。