vim-users.jp

Hack #200: 候補を選択し、実行する

Posted at 2011/02/10
このエントリーをはてなブックマークに追加

200番目のHackです。これまであなたは199ものHackを習得してきました。さらなる高みを目指して、日々修練を怠らないようにしましょう。

概要

Vimでは多くの操作が「何を行うか決め、その後候補を指定する」というものになっています。たとえばファイルa.txtを別のバッファに開くならば、:new a.txtなどというコマンドを実行することになります。まず先に:newを打鍵し、つまり「別のバッファに開く」という動作を決め、その後対象となるファイルを入力します。このとき、Vim組み込みの補完は、:newという先立つ入力をもとに、後に入力されるものはファイル名と分かりきっていることから、ファイル名のための補完を行ってくれます。かゆいところに手が届く支援もあり、また無駄な操作が存在せず、非常に効率的かつ快適です。

一方、近年Vim業界で幅を利かせつつあるuniteというプラギンが存在します。全てを統合し破壊するフレームワークなどと呼ばれていて、なんのことかよくわからずとりあえず見送っている方も多いのではないでしょうか。

uniteはこのような視点で見てみることで理解が容易になるかもしれません。従来のVimの多くの操作とと違い、「候補を選択し、それから実行する」ための機能を提供するためのフレームワークだ、という見方です。

uniteコアは枠組みを提供するのみで、実際にユーザが触れるのは個別のuniteプラギンでしょう。uniteというとuniteコアを指し、unite-fileというとuniteのfileプラギンのことを指します。uniteコアをインストールすると、特に意識することなく標準添付のプラギンがいくつか何の設定もなしに動作します。

以下の各セクションで、対象の種類に大雑把にわけてuniteプラギンの使い方について説明します。

ファイルを操作するuniteプラギン

標準添付のunite-fileというプラギンがあります。

:edit a.txt

のかわりに、まず以下のコマンドでunite窓を開きます。

:Unite file

カレントディレクトリのファイル一覧がでてきます。

つづいて、jkで項目間を移動し、今回対象として取り扱いたいa.txtのところにカーソルを移動します。つづいて、<tab>を打鍵します。

そのファイルに対して「何ができるか」の一覧がでてきました。今回行いたいのはそのファイルを開くことですので、openと打鍵して<cr>します。なお、他のコマンドとかぶらない程度に省略することができます。oで十分です。

以上でunite上でファイルの操作を行うことができることがわかりました。この説明だけを聞くと、「単に手順が増えただけじゃないか」と思うかもしれません。著者もそうでした。

また、j, kで項目間を移動するだけでなく、iを打鍵してInsert mode(*1)に入ってから適当な文字列を入力することで、その文字列で候補を絞り込むことができます。今回対象はa.txtb.txtの二つのみですので、aと一文字打鍵するだけで候補が完全にa.txtのみに絞られます。

カレントディレクトリにあるファイルを:Unite fileで開くだけならば、:editの方が良いでしょう。しかし、もうすこし複雑な例になると、uniteの優位性がじわじわと上回ってきます。

標準添付にunite-file_recというプラギンがあります。これはカレントディレクトリ以下のファイルを再帰的にすべて探索するという点を除いてunite-fileとほぼ全く同等です。

unite-file_recはかなり強力で、筆者は一日に少なくとも1000回は使用しています。:editでいちいち深いディレクトリをもぐってファイルを開く必要はありません。また、カレントディレクトリ以下のファイル数が非常に多くとも、探索が非同期で行われるため、Vimが固まることはありません。

さらに、previewモードというものが存在します。:Uniteコマンド時に-auto-previewというオプションを指定すると、カーソルを移動するたびにunite窓の少ししたに小さなウインドウが現れ、そこにファイルの中身の一部が表示されます。

ファイル以外のものを操作するuniteプラギン

筆者が頻繁に使うものの例はunite-colorschemeです。これについて詳しくは Hack #196: カラースキームは開発支援ツール を参照ください。なお、-auto-previewオプション付きで起動することにより、カーソル移動するたびに実際にそのVimのcolorschemeがチラチラ変わります。(キャンセルすると元のcolorschemeに戻ります)

また、unite-refを用いることで、ruby, haskell, perl, python, php, erlang, clojureのドキュメントをひくことができます。英和辞書、manもついていてお買い得です(*2)。これはref.vimというVimプラギンが既に存在し、そのプラギンがuniteで利用可能になっているという構造になっています。以下の図は例としてrefで>>=で検索してみたところです。Haskellの例がいくつか見つかっていますね。

他にも参考になるプラギンと対応する記事を羅列します。

  • unite-help Hack #199: :helpに慣れ親しむ
    • :helpコマンドの説明をしていますが、:helpそのものを使わずとも、unite-helpで気楽にhelpをひきましょう。

類似のフレームワークとの比較

候補を選択し、何かを実行するためのフレームワークは他にもいくつかあります。これについて詳しくは Hack #189 : Emacsのプラグインに対応するVimプラグインを参照ください。uniteの作者自らによる解説があり、必見です。

新たなuniteプラギンの開発

これについて詳しくは Hack #197: unite.vim の source を作成する を参照ください。

脚注

  • (*1) 厳密にはInsert modeではなくNarrowing modeと呼ばれるunite独自の特殊な疑似モードです
  • (*2) いまなら送料無料です
ujihisa

もどる
blog comments powered by Disqus