50 howm-mode.vim (2-27) mattn さんのパッチの取り込みと s:OpenMemo() の修正

http://mattn.kaoriya.net/software/vim/20080218172019.htm

mattn さんが書かれていた s:OpenMemo() 内の matchend の変更を吸収。ついでなので OpenMemo に手を入れてみた。

let s:errmsg_cantmkdir          = "cannot create directory '%dir%'"

" filepath を howm のメモファイルとして開く
" linenum == 0 の時には新しいメモのテンプレートを追加した状態で開く
" linenum != 0 の時にはその行にキャレットを置いた状態で開く
function! s:OpenMemo(filepath, linenum)
  let editing = s:HowmExpand("%:p")
  let filepath = s:HowmExpand(a:filepath)

  if editing != filepath
    let idx = matchend(filepath, '\V' . escape(s:HowmExpand(g:howm_dir), '\'))
    if idx != -1
      let dir = substitute(strpart(filepath, idx), '[^/]*$', '', '')
      if v:version >= 700 && exists('*mkdir')
        let dir_fp = s:HowmExpand(g:howm_dir) . dir
        if !isdirectory(dir_fp)
          silent! call mkdir(dir_fp, 'p')
          echo 'mkdir("' . dir_fp. '", "p")'
        endif
      else
        " 存在しないディレクトリ下のファイルを指定されたら,ディレクトリを作る
        let retval = s:MakeDirectory(dir)
        if retval != ''
          echohl WarningMsg
          echo substitute(s:errmsg_cantmkdir, '%dir%', escape(dir, '\'), 'g')
          echohl None
          return
        endif
      endif
    endif
    call s:OpenWindow(a:filepath, 1)
  endif
  " ...
endfunction

変更点は以下の三点。

  • matchend() の第二引数の修正
  • mkdir() が使えるとき ( v:version >= 700 && exists('*mkdir') ) は s:MakeDirectory() を使わないようにする修正
  • TODO になっていたエラーメッセージを作成