vimrcの見直し
新年を迎えたので、新たな気持ちでと思いvimrcの見直しを行いました。ほんとは年末のうちにvimrcの大掃除として終わらせたかったけど、終わらなかった。
やったこと
vimのディレクトリ構成の変更
今まで~/.vim
配下にvimの設定ファイルを設置していましたが、XDG Base Directoryに準拠したディレクトリ構成に変更しました。どうなったかというとこう。
~/.config └── vim ├── colors │ └── molokai.vim ├── dein.toml ├── deinlazy.toml ├── encoding.vim ├── mappings.vim ├── options.vim └── snippets └── php_functions.snip
~/,vim
配下にvimの設定ファイルやプラグインのソースまで全て設置していた構成から、かなりスッキリした構成になったと思います。
プラグインのソースはどこに行ったかというと、~/.cache/vim
配下に設置するようにしています。
XDG Base Directoryの構成への切り替えの手順は、以下のとおり。
1. XDG_CONFIG_HOME、XDG_CACHE_HOMEの環境変数追加
.zprofile
export XDG_CONFIG_HOME=$HOME/.config export XDG_CACHE_HOME=$HOME/.cache
2. vimのruntimepathに追加
.vimrc
set runtimepath=$XDG_CONFIG_HOME/vim,$XDG_CONFIG_HOME/vim/after,$VIMRUNTIME
setコマンドの読み込み方法の変更
以前はsetコマンドの設定ファイルを任意のディレクトリに設置し、そのディレクトリ配下のファイルをruntime!で読み込んでいました。この場合、どのファイルから読み込まれるかが不明でちょっと気持ち悪いなと思っていました。encodingの設定とかは最初に読み込んでおきたかったりするし。
なので、setコマンドの設定ファイルは個別に.vimrcで読み込むように変更することに。
.vimrc
function! s:source_rc(path) let abspath = resolve(expand(s:config_dir . '/' . a:path)) if filereadable(abspath) execute 'source' abspath return endif endfunction call s:source_rc('encoding.vim') call s:source_rc('options.vim') call s:source_rc('mappings.vim')
設定ファイルを読み込むsource_rc関数を作成。あとは読み込みたいファイル順に.vimrcに追加して行くだけ。
ちなみに、vimのscriptでよく「rc」という文字を見かけますが、「run command」の略だそうですよ。
で、見直した新しい.vimrc
.vimrc
set runtimepath=$XDG_CONFIG_HOME/vim,$XDG_CONFIG_HOME/vim/after,$VIMRUNTIME " load dein if &compatible set nocompatible endif let s:config_dir = expand($XDG_CONFIG_HOME . '/vim') let s:dein_dir = expand($XDG_CACHE_HOME . '/vim/dein') if !isdirectory(s:dein_dir . '/repos/github.com/Shougo/dein.vim') execute '!git clone https://github.com/Shougo/dein.vim' s:dein_dir endif execute 'set runtimepath^=' . s:dein_dir if dein#load_state(s:dein_dir) call dein#begin(s:dein_dir) call dein#load_toml(s:config_dir . '/dein.toml', {'lazy': 0}) call dein#load_toml(s:config_dir . '/deinlazy.toml', {'lazy': 1}) call dein#end() call dein#save_state() endif filetype plugin indent on syntax enable if dein#check_install() call dein#install() endif " load *.vim function! s:source_rc(path) let abspath = resolve(expand(s:config_dir . '/' . a:path)) if filereadable(abspath) execute 'source' abspath return endif endfunction call s:source_rc('encoding.vim') call s:source_rc('options.vim') call s:source_rc('mappings.vim')
余談
ほんとはneovimに切り替えようと思っていました。ただpython周りに設定がうまくいかず断念。vim、neovimの共存を気にしなければよかったのかも…うーん。
neovimで使ってみたいと思っていた:terminalコマンドがvim8にも実装されたこともあり、そんなに頑張って切り替えなくてもいいかも、と思い始め切り替えはやめちゃいました。またneovimで使ってみたい機能を見つけたときに、切り替えてみたいと思います。