vimrc分割した
動機
runtime
どうやらruntime使うと特定のファイルを読み込むことができ, source *.vimに近いことができるようだ.
:help runtime
ヘルプを引いてみると, 指定ディレクトリ下全ての*.vimファイルをsourceしたい場合にはruntime!すれば良いらしい.
:ru[ntime][!] {file} .. Read Ex commands from {file} in each directory given by 'runtimepath'. There is no error for non-existing files. Example: > :runtime syntax/c.vim There can be multiple {file} arguments, separated by spaces. Each {file} is searched for in the first directory from 'runtimepath', then in the second directory, etc. Use a backslash to include a space inside {file} (although it's better not to use spaces in file names, it causes trouble). When [!] is included, all found files are sourced. When it is not included only the first found file is sourced. When {file} contains wildcards it is expanded to all matching files. Example: > :runtime! plugin/*.vim This is what Vim uses to load the plugin files when starting up. This similar command: > :runtime plugin/*.vim would source the first file only.
.vimrcの設定
とりあえず$HOME/.vim/userautoload/以下へ設定ファイルを入れて, 全部読み込むようにする.
runtime! userautoload/*.vim
vimにパスが通っていないディレクトリに置きたい時は
set runtimepath+=dir
とかしてruntimepathに追加すれば良さそう.*2
どう分割するか
basic.vim | set number, wrapscan とか基本util |
color.vim | highlightの設定 |
maping.vim | キーバインドの設定(vim本体) |
latex.vim | コンパイル, pdfopenの設定が隔離されている...*3 |
plugins.vim | プラグインのロード NeoBundle設定 |
plugins-*.vim | プラグイン毎の設定(プラグイン毎のキーマップ含む) |
こんな感じの分割を考えた.
プラグイン毎の設定ファイルは迷ったけど別ファイルで分けることに.
こうして切り分けておけば, pluginを消したいときはplugins-*.vimを*.vim以外にrenameするor別ディレクトリに分けるかすれば良くなる.
ロード順前後問題
E117: Unknown function: submode#map
NeoBundleのプラグイン設定とプラグイン個別の設定を分割していたので, ロード順が前後(個別設定ファイル→プラグイン設定ファイル)してしまう問題が起きてしまった.
指定ディレクトリ下のファイル読み込み順は多分昇順ソートなのかなと思ったものの, もし環境毎に違いが出ると嫌なのでplugin設定ファイルと個別設定ファイルを別々にロードすることにした.
最終的にvimrcとディレクトリ構成をこんな感じにした.
vimrc
runtime! userautoload/init/*.vim runtime! userautoload/plugins/*.vim
分割後
.vimrc .vim/userautoload ├── init │ ├── basic.vim │ ├── color.vim │ ├── indent.vim │ ├── latex.vim │ ├── mapping.vim │ ├── plugins.vim # プラグイン設定 │ └── util.vim ├── plugins # プラグイン個別設定 │ ├── plugins-caw.vim │ ├── plugins-ctrlp.vim │ ├── plugins-jedi-vim.vim │ ├── plugins-lightline.vim │ ├── plugins-neocomplete.vim │ ├── plugins-neosnippet.vim │ ├── plugins-syntastic.vim │ ├── plugins-unite.vim │ ├── plugins-vim-fugitive.vim │ ├── plugins-vim-go.vim │ ├── plugins-vim-latex.disabled │ ├── plugins-vim-quickrun.vim │ ├── plugins-vim-snowdrop.vim │ ├── plugins-vim-submode.vim │ └── plugins-vimfiler.vim
感想
- 分割ファイルならどこかでエラーがあっても, 他の設定は生きてて助かった体験ができる
- プラグイン依存の設定を切り分けられるので管理がしやすくなる
- 問題が起こったときに原因を分離しやすい
- 全体の見通しが良くなる
- 分割過程でvimrcをついでに整理できる
特に依存関係がわかりやすくなったのは非常に良かったと思う. 今後もスッキリ管理を心がけたい.