vim-users.jp

Hack #202: 自動的にディレクトリを作成する

Posted at 2011/02/20
このエントリーをはてなブックマークに追加

Vim で新しいファイルの編集を始めるとき、そのファイルがあるべきディレクトリが存在しないことがあります。この状態だと、Vim はファイルを保存することができません。 ただし、Vim に設定を追加することで自動的にディレクトリを作成することが可能です。

設定

ファイルを開いた際にディレクトリを作成する設定もありますが、そうすると試しに開いて結局保存しなかった場合にディレクトリだけ残ってしまいます。ここでは、保存する際に同時にディレクトリを作成する設定を紹介します。

augroup vimrc-auto-mkdir  " {{{
  autocmd!
  autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'))
  function! s:auto_mkdir(dir)  " {{{
    if !isdirectory(a:dir)
      call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
    endif
  endfunction  " }}}
augroup END  " }}}

保存直前に、ファイルを保存すべきディレクトリがあるかをチェックして、ない場合に作成しています。

これだと、すでにあるディレクトリ名と間違えてファイルを開いていた場合でも気付かないうちに生成されてしまう場合があります。ディレクトリを作るかどうか確認する処理を入れることも可能です。

augroup vimrc-auto-mkdir  " {{{
  autocmd!
  autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
  function! s:auto_mkdir(dir, force)  " {{{
    if !isdirectory(a:dir) && (a:force ||
    \    input(printf('"%s" does not exist. Create? [y/N]', a:dir)) =~? '^y\%[es]$')
      call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
    endif
  endfunction  " }}}
augroup END  " }}}
thinca

もどる
blog comments powered by Disqus