僕が一番 Vim のタブページをうまく使えるんだ(カレントディレクトリ編)


2012年 05月 01日

問題

Vimのタブページはとても便利です。
例えばウィンドウを分割して複数のファイルを並行してにらめっこしていたとしましょう。
その最中に誰かからの依頼等で全く関係のない作業をやることになったとします。
このとき、

  1. 新しいタブページを開いて、
  2. そこで作業を進めて、
  3. 作業が完了したらタブページを閉じて、
  4. 先程まで行っていたにらめっこ作業を再開する

という形で中断された作業をスムーズに再開することができます。
やりましたね。

しかし、これだけではまだタブページを全力全開で活用しきっているとは言えないのではないでしょうか。

例えば以下のような状況を考えてみましょう:

  • あなたはプロジェクトAとプロジェクトBの両方を開発しています。
  • AとBは相互に連携しています。
  • 大抵はAまたはBのどちらかの配下のファイルだけを編集するだけで十分です。
  • 時には双方の配下のファイルを並行して編集する必要があります。

このような状況で効率良く開発する方法は色々あると思いますが、
その一つとして
「プロジェクト毎に専用のタブページを用意して作業する」
というものがあります。
この例で言えばA用のタブページとB用のタブページをそれぞれ用意して、
各プロジェクトのファイルは専用のタブページでのみ開くということです。
ひとつのタブページ内で双方のプロジェクトのファイルを開いているとどこにどのファイルが表示されているのか混乱しがちだからです。

ただこの方式にはひとつ問題があります。
例えばAは ~/project/a に、Bは ~/project/b にあるとしましょう。

  • カレントディレクトリを ~/project/a に切り替えておけばAのファイルを開いたり :grep するのが簡単になります。
  • しかしこの状態でB用のタブページを表示してBに関する作業をしようとすると、
    カレントディレクトリが ~/project/b ではないため、
    Bのファイルを開いたり :grep するには適宜追加のパスを入力しなければならず、面倒です。

理想としては タブページ毎にカレントディレクトリを設定 できれば良いのですが、
あいにくそのような機能はVimには存在しません。
似たような機能としては :lcd があるのですが、
これはウィンドウ毎にカレントディレクトリを設定するコマンドなので、
これでは切り替える単位が細かすぎて不便です。
どうすればよいでしょうか。

解答

vim-tabpagecd を使います。

このプラグインをインストールすると :cd がタブページ単位で機能するようになります。
何も設定する必要はありません。
やりましたね。

このプラグインは実質10行程度の簡単な作りになっていますので、
Vimプラグイン作成のとっかかりにもちょうど良いでしょう。

予告

次回は Emacs 編です。