【一人 vimrc advent calendar 2017】ディレクトリをオプションに設定した場合にディレクトリも生成する【7日目】
一人 vimrc advent calendar 2017 7日目の記事になります。
'backupdir'
や 'undodir'
などでディレクトリを設定する場合の注意
さて、、Vim では 'backupdir'
や 'undodir'
などディレクトリを設定するオプションがいくつかあります。
"バックアップファイルを作るディレクトリ set backupdir=$HOME/vimbackup " undo ファイルを保存するディレクトリ set undodir=$HOME/vimundo
しかし、上記のようなディレクトリを設定するオプションは『ディレクトリが存在しなかった場合』に自動でディレクトリを作成しません。
なので自前でディレクトリを作る必要があります。
また、設定したディレクトリが存在しなくても特にエラーは出力されません。
vimrc
内でディレクトリも作成する
自前でいちいちディレクトリを作成するのはめんどくさいので簡単な Vim script で対応してみましょう。
" ネストしたディレクトリを作成する関数 function! s:mkdir(dir) if !isdirectory(a:dir) " "p" を渡すことでネストしたディレクトリ全てが作成される call mkdir(a:dir, "p") endif endfunction "バックアップファイルを作るディレクトリ set backupdir=$HOME/vimbackup " 設定したディレクトリを生成する " & をつけてオプションの値を渡していることに注意 call s:mkdir(&backupdir) " undo ファイルを保存するディレクトリ set undodir=$HOME/vimundo call s:mkdir(&undodir) set undofile
このように vimrc
に記述しておけば 'backupdir'
などを変更した場合でも自動でディレクトリが生成されます。
ただし、あくまでも vimrc
上でディレクトリを生成しているのでコマンドライン等で 'backupdir'
のディレクトリを変更した場合は反映されないので注意してください。
この辺りは autocmd OptionSet
を使えばいい感じに自動生成してくれそうですがうーん。
まとめ
まあ、めんどくさいことは Vim script をさくっと書いてしまうとよいですね。