f

2014-09-11

Copy to clipboard in tmux on Linux, Cygwin, Mac

Gnu screenからTmuxへターミナルマルチプレクサーの移行を進めている。移行に必要な作業はGnu screenでやっていたことの再現だ。
具体的には以下の内容を実現したい。
  1. tmux起動時にzshを起動
  2. クリップボードの共有化
  3. 画面サイズの変更のためのキーバインド設定
この内1は前回の記事で解決した。今回は2を解決した。。
tmuxにはコピーモードがあり,このモードで画面を選択してtmux上のクリップボードに内容をコピーして後で貼り付けることができる。しかし,これはOSのクリップボードとは独立している。コマンドやコマンドの実行結果などをコピーして貼り付けたりするために,tmuxでコピーした内容をOSのクリップボードへコピーするようにしてクリップボードを共有したい。
tmux version 1.8から導入されたcopy-pipeという機能を使えば,中間ファイルを介さずにできる。Gnu screenでは中間ファイルを介して実装していたので,この点でもtmuxは進んでいるといえる。
参考:tmuxのバージョンを1.8にアップデートして、クリップボードの設定 - Qiita http://qiita.com/kkabetani/items/e37ac1e4e0b53c418a35
tmuxでクリップボードの共有のために行う手順は以下の2点だ。
  1. コピーコマンドのインストール
  2. ~/.tmux.confへの設定
順を追って以下で説明する。

1 クリップボードへのコピーコマンドのインストール

tmuxのコピーモードでコピした内容をクリップボードに渡すにはOSごとに用意されているクリップボードの操作コマンドを利用する。
8.2: OSごとにクリップボードへのコピーに使用するコマンド
$OSTYPE
コマンド
linux
xsel, xclip
cygwin
putclip
mac
pbcopy
Macは環境がないので憶測である。
Linuxではクリップボードの操作コマンドにいくつかある。どれも対して変わらないと思う。今回はxselを使用する。LinuxCygwinでは標準ではコマンドがインストールされていないのでそれぞれ事前にインストールしておく。
Linux(Ubuntu)では以下のコマンドでインストールできる。
sudo aptitude install xsel
Cygwinではsetup.exeからcygutils-extraを選択してインストールすることでputclipもインストールされる。

2 ~/.tmux.confの設定

以下のコードを~/.tmux.confに記入すれば各OSごとに機能する。コピーモードで範囲選択後,Enteryによりクリップボードにコピーされる。
## copy to clipboard
### for Linux
if-shell "which xsel" '\
  bind-key -t vi-copy y copy-pipe "xsel -ib"; \
  bind-key -t vi-copy enter copy-pipe "xsel -ib"; \
'
### for Cygwin
if-shell "which putclip" '\
  bind-key -t vi-copy y copy-pipe "iconv -s -t SJIS | putclip"; \
  bind-key -t vi-copy enter copy-pipe "iconv -s -t SJIS | putclip"; \
'
### for Mac (not checked)
  if-shell "which pbcopy" '\
  bind-key -t vi-copy y copy-pipe "pbcopy"; \
  bind-key -t vi-copy enter copy-pipe "pbcopy"; \
'

2014-09-18追記:Cygwinで日本語をコピーするときは文字化けするのでionvで文字コードを変換してからputclipに渡すようにした。
簡単に内容を説明する。
  • if-shell "which xsel"でコマンドがあるか判定。あれば次の' 'で囲んだ箇所を実行。
  • \で行を継続。
  • ;で連続実行(なお&&での連続実行は無理)
xsel-iで標準入力を受けつけ,-bでクリップボードにコピーしてくれる。LinuxではクリップボードにPRIMARYSECONDARY, CLIPBOARD3種類がある。PARIMARYはマウスで選択したらコピーされる領域で中ボタンのクリックで貼り付けられる。SECONDARYは普段は使わず一部のプログラムのみ使用する。。CLIPBOARDC-c, C-xや右クリックのコピー,切り取りなどでコピーされる領域。C-vや貼り付けにより貼り付けられる。
これらのクリップボード操作コマンドは何かと便利なので記憶にとどめておくとよい。
より詳細が知りたければ以下が参考になる。。

3 参考情報

この.tmux.confの設定に辿り着くまでに以下のようなサイトを参考にした。

0 件のコメント:

コメントを投稿