Mac でも Linux でも一発でクリップボードにコピーする zsh の alias

メールを送るときって当然メーラーを使うんだけど、普通メーラーでは vim が使えない。困った。これでは文章が書けない。

なので、僕はいつもターミナルの vim でメールを書いてからメーラーにコピペしてる。でも、そのコピペがめんどくさい。マウスをぐいーんって動かしたくないし(疲れる)、長文だとターミナルの1画面に収まらなくて選べない。全然スマートじゃない。

というわけで、さくっとクリップボードにコピーする zsh の alias を設定した。

設定例

.zshrc の例は以下。

if which pbcopy >/dev/null 2>&1 ; then 
    # Mac  
    alias -g C='| pbcopy'
elif which xsel >/dev/null 2>&1 ; then 
    # Linux
    alias -g C='| xsel --input --clipboard'
elif which putclip >/dev/null 2>&1 ; then 
    # Cygwin 
    alias -g C='| putclip'
fi

C をグローバルエイリアスとして設定してる。これで Mac でも Linux でも C だけで標準出力をクリップボードにコピーできるようになる。便利。

2010/03/18 追記

コメントで Cygwin の場合は putclip を使うといいと教えてもらったので設定を追加した。でも、僕は Cygwin 環境を持っていないので動作までは未確認。

使い方

使い方の例は以下。

% vim mail.txt    # vim でメールを書く
% cat mail.txt C  # メールの内容をクリップボードにコピーする
# INPUT.txt のうち 10から15行目をクリップボードにコピーする
% sed -n '10,15p' INPUT.txt C

ポイント

ポイントをちょっと説明しておく。

Mac と Linux ではクリップボードにコピーするコマンドが違う

Mac と Linux ではクリップボードにコピーするコマンドが違って、Mac では pbcopy、Linux では xsel になる。というか、その二つのうちインストールしてある方を使う。たぶん Linux 環境では標準で xsel が入ってないのでインストールしておこう。

Windows は知らん。

xclip ではなく xsel を使う

Linux 環境では xclip ってコマンドもある。というか、github に xclip 使えって書いてあって、最初そっちを使ってた。でも、xclip には日本語が文字化けするという致命的な弱点があるので、代わりに xsel を使うようにした。xsel は文字化けせずにちゃんとコピーできる。よしよし。

xsel の --clipboard オプション

xsel で --clipboard(または -b) を指定すると CLIPBOARD selection にコピーする。オプションを省略するか -p または --primary オプションを指定すると PRIMARY selection にコピーする。

CLIPBOARD とか PRIMARY とかって何かよく分かんないけど、CLIPBOARD が Ctrl-V とか右クリックメニューで貼り付けできるやつで、 PRIMARY がマウス真ん中クリックで貼り付けできるやつ、とかそんな感じ。適当に選んでおこう。

参考ページ

xsel がちょっと分かりにくかったので、以下のページを参考にした。