basyura's blog

あしたになったらほんきだす。

hatena.vim を読む その5

" スクリプトのベースディレクトリ (クッキーの保存に使われるだけ)
if !exists('g:hatena_base_dir')
    let g:hatena_base_dir = substitute(expand('<sfile>:p:h'), '[/\\]plugin$', '', '')
endif

if !exists('g:hatena_base_dir')

g:hatena_base_dir が存在しない場合

expand(':p:h')

<sfile>    コマンド ":source" の実行時、取り込まれたファイルのファイル
       名に置き換えられる。
       関数の実行時、"関数 {関数名}" に置き換えられる。関数呼び出
       しのネスト (入れ子状態) はこのように表される:
       "関数 {関数名1}..{関数名2}"。
expand({expr} [, {flag}])
        ワイルドカードと{expr}内の特殊なキーワードを展開する。戻り値は
        文字列。
        変換子:
            :p      フルパス名を展開
            :h      ヘッド(ディレクトリ)

plugin ファイル読み込みディレクトリを取得する

expand('<sfile>')     → /Users/basyura/.vim/plugin/hatena/plugin/hatena.vim
expand('<sfile>:p')   → /Users/basyura/.vim/plugin/hatena/plugin/hatena.vim
expand('<sfile>:p:h') → /Users/basyura/.vim/plugin/hatena/plugin

plugin ファイル読み込みディレクトリパスに置換処理を行って plugin のルートディレクトリを取得する。cookie ファイルの保存位置に使用する。

substitute(expand('<sfile>:p:h'), '[/\\]plugin$', '', '')
→ /Users/basyura/.vim/plugin/hatena