読者です 読者をやめる 読者になる 読者になる

local_vimrc の焼き直し localrc.vim 書いた

ファイルを読み込んだ際にそのファイルのある位置から上に辿っていって特定のファイルを探し、見付かったら source する、いわゆる local_vimrc なプラグイン

既存のスクリプト

既存ですでに結構ある。まずはそれらを簡単にまとめ。
ちなみにどれもソースを読んだだけで実際に使ってみたわけではないので注意。勘違いとかあるかも。www.vim.org でざっと探した程度なので他にもありそう。

  • localvimrc
    • 設定で読み込むファイルの数や sandbox を使うか、1 つずつ読み込むかを聞くかどうかなどを指定できる。
  • local_vimrc.vim
    • 実装がかなりアレ。特に BufEnter を使っちゃってる辺りそもそも目的からして違う気すらする。
  • perdirvimrc
    • 複数のファイルを探してくれる。が、読むファイル名は固定。カスタマイズできない。

ちなみに私が欲しいのはvimrcからロード処理ができるようなもの。以前の件で、runtimepath が弄りたかったので。上記のは全て plugin 読み込み時に起動するんだけど、このタイミングでやると後から追加した runtimepath の plugin がロードされない*1ので無理。
で、同様のことをやるコードが vimrc に書いてあったんだけど、せっかくなので plugin にしてみた。

localrc.vim

https://github.com/thinca/vim-localrc

特徴とか
  • ロード関数は autoload 化。
    • これにより vimrc からロードできるようにする件を解決。
  • ロード関数が独立しているので、それなりに柔軟にできる。
    • デフォルトでは、
      • ファイル読み込み時にそのファイルのディレクトリより上にある ".local.vimrc" を読む。
      • ファイルタイプ設定時に ".local.{filetype}.vimrc" を読む。
      • ファイル名は設定で変えられる。また、autocmd を設定しているだけなので独自に追加も可能。
    • 私は vimrc で起動時にカレントディレクトリから辿って ".init.vimrc" を読むように設定。
  • 複数のファイルを探したりパターンにマッチしたファイルを探したりできる。
  • ファイルは浅い階層からロードされる。
  • 探す階層数を指定できる。
    • localvimrc では階層数ではなくファイル数で、これだとファイルが増減すると指定変えなくちゃいけなくて微妙にアレな気がしたので。
  • スクリプト内からそれ以降のスクリプトの読み込みをキャンセルする機能を付けようかとも考えたけど、浅い層からロードされるのであまり意味ないかなと思って今のところ入れてない。
  • localvimrc にある sandbox で評価もない。
    • セキュリティを考えたらあった方がいいのかも知れないけど、sandbox の中じゃキーマッピングも設定できないし、実用性を考えると結局みんな無効にするんじゃないか、と思ったので。


この種類のプラグインは quickrun の b:quickrun_config のようなバッファ毎に挙動を変える設定をするのに都合が良い。
使い方次第で色々と便利になると思います。お試しあれ。

*1::runtime! を使う手もあるけど、プラグイン複数回ロードしようとすることになるし気持ち悪い。