🍵

Vim の超軽量ファイラを作った

2020/09/27に公開

先日、@lambdalisue さんが Vim 上のファイラを紹介する記事を書いてくれていました。

2020秋 Vim のファイラー系プラグイン比較 | Zenn

僕はこの中の dirvish というプラグインを使っていました。

Big Sky :: Vim 上のファイラを NERDTree から dirvish に乗り換えた。

dirvish を使っていた一番の理由は「超軽量」だからです。何故 netrw を使わないかというと、メンテ可能なソースコードじゃないという理由が1つ、もう一つが fat 過ぎるという理由です。

僕が考える理想のファイラ

これは皆さんそれぞれ意見があり、違って当然なのであくまで僕個人の意見です。僕が Vim のファイラに求めるのは

  • :e /path/to/ でファイラ開きたい
  • $ vim /path/to/ でファイラを開きたい
  • ファイルの一覧を速く表示して欲しい

これだけなのです。できればプログラミング中はプログラムの事だけを考えたいです。なのでファイルの一覧から今起動している Vim で編集できれば良くて、コピーやリネーム等の機能は必要ないというのが僕の意見です。

他に無かったのか

候補としては dirvishvaffle が理想に近かったです。

dirvish を諦める理由

dirvish を諦めるに至った理由は以下の通り。

  • ハイジャック(netrw を無効にして :e /path/to/ 等にフックを掛けること)が時々壊れる
  • 作者が Neovim のメンテで忙しすぎて dirvish をメンテしてくれない
  • 検索のインタフェースが好きではない

特に3点目がどうしても気に入る事ができなくて、/ 前方を検索させる為に余計な物が付いているのです。

vaffle を選ばなかった理由

vaffle を選ばなかった理由は以下の通り。

  • vaffle でさえも機能が多すぎた
  • 現在のディレクトリがプロトコル形式だった (例: vaffle://0/C:/path/)

特に後者が僕にとっては問題で、僕の場合はコマンドラインで <CTRL-x> をタイプすると現在のパス(バッファ名)を補完する以下のキーマップが入っています。その際に vaffle:// が含まれてしまうと困るのです。

cnoremap <c-x> <c-r>=expand('%:p')<cr>

例えば :!rm までタイプして <CTRL-x> をタイプしてファイル名を入力する、といった用途で使っているのでどうしてもリアルなパスである必要がありました。

無いなら作る

無いなら作るしかありません。昨晩、dirvish の代替を探している間に、作り始めてしまいました。

https://github.com/mattn/vim-molder

本当に何もしないファイラです。他のファイラの様に以下の様な機能はありません。そして今後も取り込まないと思います。

  • ディレクトリを作る機能
  • ファイルをリネームする機能
  • ファイルを削除する機能
  • ファイルをシェルに食わせる様な仕組み

あるのは

  • ファイルの一覧が表示できる
  • - で上のフォルダに移動できる
  • フォルダでエンターキーを押すと中に移動する
  • ファイルでエンターキーを押すとその Vim で開く

これだけです。ちなみに molder という名前は、dirvish がディレクトリの dir から持ってきているのをパクりたくて dirty とか色々考えたのですが、いいのが思いつかず結局 folder からモジって molder としました。(モルダー、あなた疲れてるのよ)

ただ、作り始めたら vim-jp の何人かの方が興味を持ってくれて「ディレクトリが作りたい」という要件を頂きました。これは僕の molder のポリシーと異なるものでした。そこで vim-molder に外部プラグインを読み込む仕組みを実装し、拡張プラグインをロードした場合だけ、その機能が使える様にしてみました。

https://github.com/mattn/vim-molder-operations

このプラグインを一緒に入れておくと、上記で書いた様な、ディレクトリ作成や削除、リネームといった簡単なファイル操作ができる様になっています。

今後は...

ひとまずファイラを自作した事で、dirvish 依存を切る事になりました。気に入らない動作があったら自分で直してしまえばいいので随分と気が楽になりました。

機能が少ないですし、本体の方は拡張する予定がないので、メンテもバグ修正メインになると思いますが、こういう「超軽量ファイラ」に興味のある方はご利用下さい。

Discussion