Copy to clipboard in tmux on Linux, Cygwin, Mac
Gnu
screenからTmuxへターミナルマルチプレクサーの移行を進めている。移行に必要な作業はGnu
screenでやっていたことの再現だ。
具体的には以下の内容を実現したい。
- tmux起動時にzshを起動
- クリップボードの共有化
- 画面サイズの変更のためのキーバインド設定
この内1は前回の記事で解決した。今回は2を解決した。。
tmuxにはコピーモードがあり,このモードで画面を選択してtmux上のクリップボードに内容をコピーして後で貼り付けることができる。しかし,これはOSのクリップボードとは独立している。コマンドやコマンドの実行結果などをコピーして貼り付けたりするために,tmuxでコピーした内容をOSのクリップボードへコピーするようにしてクリップボードを共有したい。
tmux
version 1.8から導入されたcopy-pipeという機能を使えば,中間ファイルを介さずにできる。Gnu
screenでは中間ファイルを介して実装していたので,この点でもtmuxは進んでいるといえる。
tmuxでクリップボードの共有のために行う手順は以下の2点だ。
- コピーコマンドのインストール
- ~/.tmux.confへの設定
順を追って以下で説明する。
1 クリップボードへのコピーコマンドのインストール
tmuxのコピーモードでコピした内容をクリップボードに渡すにはOSごとに用意されているクリップボードの操作コマンドを利用する。
表 8.2:
OSごとにクリップボードへのコピーに使用するコマンド
$OSTYPE
|
コマンド
|
linux
|
xsel,
xclip
|
cygwin
|
putclip
|
mac
|
pbcopy
|
Macは環境がないので憶測である。
Linuxではクリップボードの操作コマンドにいくつかある。どれも対して変わらないと思う。今回はxselを使用する。LinuxとCygwinでは標準ではコマンドがインストールされていないのでそれぞれ事前にインストールしておく。
Linux(Ubuntu)では以下のコマンドでインストールできる。
sudo
aptitude install xsel
Cygwinではsetup.exeからcygutils-extraを選択してインストールすることでputclipもインストールされる。
2 ~/.tmux.confの設定
以下のコードを~/.tmux.confに記入すれば各OSごとに機能する。コピーモードで範囲選択後,Enterかyによりクリップボードにコピーされる。
##
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ではクリップボードにPRIMARY,SECONDARY,
CLIPBOARDの3種類がある。PARIMARYはマウスで選択したらコピーされる領域で中ボタンのクリックで貼り付けられる。SECONDARYは普段は使わず一部のプログラムのみ使用する。。CLIPBOARDはC-c,
C-xや右クリックのコピー,切り取りなどでコピーされる領域。C-vや貼り付けにより貼り付けられる。
これらのクリップボード操作コマンドは何かと便利なので記憶にとどめておくとよい。
より詳細が知りたければ以下が参考になる。。
- ひつまぶし食べたい: Xのクリップボードについて http://hitsumabushi-pc.blogspot.jp/2012/02/x.html
3 参考情報
この.tmux.confの設定に辿り着くまでに以下のようなサイトを参考にした。
- dotfiles/.tmux.conf at master · satoshiyamamoto/dotfiles https://github.com/satoshiyamamoto/dotfiles/blob/master/.tmux.conf
- コピーモードで範囲選択後、prefix-nかEnterでクリップボードにコピー。
- command line – copy (to X clipboard) shortcut in .tmux.conf – Unix & Linux Stack Exchange http://unix.stackexchange.com/questions/48631/copy-to-x-clipboard-shortcut-in-tmux-conf
- Mac でも Linux でも一発でクリップボードにコピーする zsh の alias – mollifier delta blog http://mollifier.hatenablog.com/entry/20100317/p1