ここぽんのーと

コードとデザインの境界に生きるエンジニアの、雑多な記録帳。

[Vim] シンプルなファイラー「Vaffle」をつくりました

2017/01/26, cocopon

こんばんは。Vimがないと戦闘力が10%程度まで低下してしまうcocoponです。シンプルなファイル操作プラグイン「Vaffle」を新たに開発しまして、今回はその紹介記事です。

Vim標準のファイラー「Netrw」

Vimには、「Netrw」という名前のファイラーが標準で付属しています。例えば:e .(カレントディレクトリを開く)のようにディレクトリを開くと、Netrwが起動します。

これがちょっと使いづらいのです。慣れの問題もあるのかもしれませんが、ファイル操作がサクッと直感的にできない。

例えば、~/foo.txt~/bar/に移動しようと思ったら、

  • ~/を開いてファイル一覧を表示
  • 移動先bar/mtでターゲットに設定
  • 移動対象foo.txtmfで選択
  • 選択した移動対象をmmでターゲットに移動

という操作になります。うーむ…。

ネットワーク越しのファイルを編集できるなど、どうやら意外と多機能らしいのですが、個人的にはあまりお世話になることはありません。

理想のファイラーを求めて

このような状況のなか、理想的なファイラーを追い求めて、多くの先人たちがそれぞれ独自のプラグインを制作・公開しています。自分も早い段階でNetrwを離れて、他のファイラーを使いはじめました。

vimfiler

vimfiler」は、Vim界で知らない者はいない「暗黒美無王(あんこくびむおう)」ことShougo氏によるプラグイン。高機能かつ操作が直感的です。同じくShougo氏によるプラグイン「Unite.vim」のインストールが必須となります。

最近、このUnite.vimの開発停止および後継プラグイン「Denite.nvim」への移行が宣言されまして、将来的にはvimfilerも移行していくものと思われます。

Denite.nvimの動作には、Vim8.0以降かつPython 3.xのサポートが必須と、動作環境がややシビアです。とあるプラグインの動作確認のため、手元でPython 3.x対応のVimを用意した経験があるのですが、なぜかPython 2.xが有効になり3.xが無効になってしまうトラブルに巻き込まれるなどして、ビルドオプションを再度書き直し、ビルドし直し…あれは辛かった。
(古い環境を捨てる・動作環境を絞るというのは、ユーザーとしての意見はさておき、開発者としてはとてもよいことだと思います)

とにかく、パワフルな動作を確保するために動作環境を絞り、幅広い要望に対応できるようカスタマイズ性を高めていくのが、Shougo氏のプラグインの哲学のようです。

長らく愛用していたのですが、広いバッファで表示がもたつく現象に悩まされたり、ウィンドウを分割すると意図せず連動してしまったり…。「プラグインはシンプルに」「それぞれはなるべく疎結合であってほしい」という個人的な好みとの相違もあり、いろいろな条件を考慮した結果、乗り換えを決意しました。

dirvish

次に試したのが「dirvish」。ドキュメントで「Minimalist “path navigator”」とうたわれているとおり、その機能はとてもシンプルに保たれています。

動作は軽快ですし、「シンプルであれ」という強い意志を感じて好印象なのですが、どうしても機能に不足を感じてしまいます。複数ファイルを選択して移動したい、リネームしたい、…。あぁ、vimfilerだったころが懐かしい。

こちらもしばらく使っていましたが、やはり我慢できなくなり…。「NERDTree」など、他にも幾つか候補は存在するのですが、どうにも自分の使い方と合わず、とうとう自作するしかなくなってしまいました。

理想のファイラー

以上の状況を整理すると、自分の理想のファイラーとは…。

  • シンプルで軽快
  • 複数ファイルの選択・操作が直感的にできる
  • ウィンドウを分割しても問題なく動作する

コンセプトは決まった。よーし、がんばって作るぞ!

…といった経緯で開発したのが、ファイラープラグイン「Vaffle」です。

プラグイン名は、Vimのバッファー(Buffer)とファイラー(Filer)の語をそれぞれ組み合わせつつ、甘いもの好きなので響きの似ている(?)ワッフル(Waffle)にちなんでまとめたものです。

Vaffle

ディレクトリ間は、慣れ親しんだhjklでサクサクと移動できます。ウィンドウを分割してもだいじょうぶ。

新規ファイルはfileのi、新規フォルダーはfolderのo

複数ファイルの選択はスペース。ディレクトリをまたいだ選択はできないのでご注意を。
選択したファイルの削除はd、リネームはr、移動はm

詳しい使いかた/カスタマイズ方法は、ドキュメント(:help vaffle)に書いてあります。理想的なファイラーを追い求めて幾千年なかた、よかったら試してみてください。