クリップボードのテキストをMacVimで瞬時に開いたらお仕事が捗った(捗る予定)

こんにちは、平野です。

私は常日頃からテキスト編集にはできるだけVimを使いたいと思っていますので、クリップボードに入れた文字列に対してちょっとした整形や集計処理をしたい時にも当然Vimを使いたいものです。

ということで、Macにおいて、クリップボードの文章をVimで、できるだけ使い捨て感覚に開くようなカスタマイズを行ってみました。

MacVim

Macではターミナルから標準でVimが使えますが、主に使い捨てにしたいという理由から、今回はMacVimにてウィンドウを開きたいと思います。 今回はMacVim-KaoriYaを使いました。 インストールはリンク先に書かれている通り、GitHubのリリースページからdmgをダウンロードして叩くだけです。 これらのgvim(グラフィカルなvim)はターミナルとは独立に立ち上がりますので今回のような用途にはちょうどいいです。

MacVimは普通に立ち上げるとカラのバッファが開きます。 クリップボードの内容をここに貼り付けても良いのですが(多分ほとんどの人はそれでいいはず・・・)、設定によってはインデントが崩れたりなどの弊害がありますし、何よりも貼り付ける手間が面倒なのでもう少しスマートにクリップボードを開きたいと思います。 怠惰は美徳です。

Automatorでアプリケーションを作る

Automatorで自作のアプリケーションを作るという形で実現していきます。

Automatorを起動したら「アプリケーション」を選択します。

「シェルスクリプトを実行」という項目を右の空間にドラッグ&ドロップします。 (項目がたくさんあるので上の検索窓に入力した方が早いです)

次のようなスクリプトを入力します。

export LANG=ja_JP.UTF-8
pbpaste | /Applications/MacVim.app/Contents/bin/mvim - >/dev/null 2>&1

スクリプトがなぜか左の方に固まってやたらと改行されますが、それは特に問題ないようです。 スクリプトの中身はpbpasteでクリップボードの中身を出力し、mvim -で標準出力として受け取っています。 mvimはスクリプトからMacVimを呼び出すときに指定するファイルです。

なおMacVimのインストール場所を変えている方は適宜修正して下さい。 実行するシェルは「/bin/sh」にしていますが、「/bin/bash」のままでもいいです。

「ファイル」から「保存」を選んで、フォーマット「アプリケーション」としてアプリケーションディレクトリに保存します。 今回はこのアプリの名前を仰々しくも「Vim」としました。

基本的には以上で完成です。

使ってみる

編集を開始する

では実際に開いていましょう。

・・・と、まさかアプリケーションディレクトリをFinderで開いてダブルクリックなんてしませんよね? せっかくVimでマウスを使わずに操作ができるのに、それを開くためにマウスを使うなんて時間の無駄です。 キーボードから手を離さないためにも、「⌘+Space」のSpotlight検索を使いましょう。

⌘+Space v i m Enter

というキーストロークで、クリップボードの文字列が書かれた状態のVimが開かれるようになります。 (最初は「MacVim」が選ばれるかもしれませんが、一度「Vim」を選択してしまえば次からはこちらが第一候補になります)

なお、Spotlight起動時に日本語入力がONになった状態だと「ゔぃm」となってしまい、快適&最速を目指すには少し課題があります。 私は実際はSpotlightではなくAlfredというコマンドランチャを使っていますが、こちらなら日本語オフの設定もできますので、より快適に使いたい方はインストールしてみてください。1

編集する

ここはただ普通に編集するだけです。 以前私が書いた記事なんかも参照して頂けると嬉しいです。

編集内容をクリップボードに貼り付けて終了

最後に編集完了した内容をクリップボードに貼り付けたら、このウィンドウはお役御免です。

もちろん普通にクリップボードに入れてウィンドウを閉じて、というのを手でやっても良いのですが、やはりここはキーバインドを設定してラクをするべきですね。 私は.gvimrcに以下のような設定をしてみました。

nnoremap <C-q> ggVG"*y:q!<CR>

「Ctrl+q」を押したら文章全体をクリップボードに貼り付けて終了です。

アイコンを設定

上のスクリーンショットでは処置済みですが、Automatorで作ったアプリケーションはデフォルトではAutomatorのアイコンになってしまいますので、これをMacVimのアイコンにしたいです。

やり方は、まずMacVimの「情報を見る」で下記の画面を出し、左上のアイコンを選択して「⌘+c」でコピーします。

そして自作したVimでも同様に「情報を見る」から左上のアイコンを選択し、「⌘+v」で貼り付けます。

これで見た目的にも文句なしです。

スクリプトについて

環境変数について

今回作成したアプリケーションはMacVimを直接読んでいるので、.bash_profile.bashrcファイルは一切読まれません。

この状態では、私の環境では日本語の文章を開くとエンコーディングがcp932になってしまって、一部の文字が含まれた時に文字化けしていましたのでexport LANG=ja_JP.UTF-8を設定しています。

また、PATHについても自分で追加したいものがある場合はスクリプトに書く必要があります。

>/dev/null

スクリプトで>/dev/null 2>&1として出力を全て捨てています。

これは、これがないとMacVimを呼び出した(実は裏で動いていた)Terminalが終了しないためです。 実際にこの部分を除いたアプリケーションを実行してみるとわかりますが、画面上部のメニューバーに歯車が表示され、当該のMacVimのウィンドウを閉じてもそれが消えない状態になります。 この状態だと2回目以降にアプリケーションが起動できなくなってしまいます。

まとめ

キーボードから手を離さずにVimでクリップボードの内容を編集したいという非常に個人的な欲求を満たす方法をご紹介しました。 この方法ですと、アプリケーションを立ち上げれば新しいウィンドウが開かれますので、既に編集中のウィンドウがあっても気にせず使うことができ、なかなか快適です。

Macを使っていて文字列編集はVimでやりたい人向けという、世の中の需要を完全に無視した記事ですが、応用すれば他のエディタでも同様のことはできるかと思いますので、この記事に触発されて似たことをやってくれる人が増えたら嬉しいです。

参考情報

MacVim-KaoriYa Readme

Mac OSXでシェルスクリプトをfinderから実行する

MacのAutomatorで作ったアプリのアイコンを変える方法。


  1. もちろんもっと速さを求める方はホットキーとか設定してください