TIM Labs

Vimで「あの」ファイルを即座に開く

| コメント(0) | トラックバック(0)

問題

Vim で多数のファイルを編集することはよくあります。 例えば「foo」という名前の Vim プラグインを開発しているとしましょう。 すると autoload.foo.vim、doc/foo.txt、plugin/foo.vim などの特定のファイルを頻繁に編集することになります。 このような状況では 「doc/foo.txt を編集しようと思ったけれどどのウィンドウにも doc/foo.txt は表示されていない」 ということは起こりがちです。 そこで問題のファイルを明示的に開く必要がでてきます。 しかしファイルを開く方法は沢山あります。 あなたならどうやって問題のファイルを開きますか? :edit? :buffer? それともお気に入りのバッファ管理プラグイン?

どれを選ぶにせよ、問題のファイルを開くためには何がしか追加情報を指定する必要があります。 例えば :edit を使うならファイルへのパスを指定しなければなりませんし、 :buffer を使うならバッファ番号を指定しなければなりませんし、 他の方法でも同様に何かヒントを指定する必要があります。 つまり、 何も指定せずに 問題のファイルを開く方法はありません。

先程例示した状況ではユーザーが「doc/foo.txt を編集したい」と思っている以上、 その 気持ちを汲み取って問題のファイルを自動的に判断して開いてほしい ものです。 どうすればよいでしょうか。

解決

vim-altr を使います。 このプラグインをインストールし、vimrcに以下のような内容を追加したとしましょう:

nmap <F2>  <Plug>(altr-forward)

Normal mode で <F2> を押下すると Vim が現在の状況からユーザーの気持ちを汲み取って 必要なファイルを開いてくれるようになります。 ファイルへのパスやバッファ番号など、追加情報は何も指定する必要はありません。 ただ <F2> を押下するだけで OK です。

とはいえ、vim-altr は常にユーザーの気持ちを汲み取ることができるわけではありません。 例えば新進気鋭の Web アプリケーションフレームワークなどが出てきた場合、 vim-altr としてはそのフレームワークでのファイル名の慣習などは分からないため、 教え込む必要があります。 これには以下のような内容をvimrcに追加します:

call altr#define('autoload/%.vim', 'doc/%.txt', 'plugin/%.vim')

補足

実のところ類似する目的のプラグインは既に存在します。 a.vim です。 a.vim も便利ではあるのですが、以下の理由から著者はあまり気に入っていません:

  • 基本的に拡張子ベースで開くべきファイルを推論します。 しかし同一拡張子のファイル間を行き来するケースは決して少なくありません。
  • 設定方法が冗長で読み書きするには不便です。 特に autoload/foo.vim、doc/foo.txt、plugin/foo.vim のように 3種類以上のファイルに跨った設定は読むのも書くのも大変です。
  • プラグイン名がとても検索し辛いです。
  • テストコードがありません。

ですので vim-altr を作成しました。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/240

コメントする

このブログ記事について

このページは、kanaが2011年7月 1日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「Java SE 7 ってなんじゃらほい?」です。

次のブログ記事は「PythonでLINQライクなリスト処理ライブラリを実装する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。