Webtech Walker

vimでHTMLとかを編集するときに絶対パスのファイルを開く

imはファイル名のところでgfとタイプすると該当のファイルを開く機能があります。

例えば以下のようなソースでjs/jquery.jsの上でgfと押すとカレントファイルからの相対パスを探して、ファイルがあればファイルを開きます。

<script type="text/javascript" src="js/jquery.js"></script>

でもHTML書くときにドキュメントルートからの絶対パスで書くときもあるわけで、そのときはどのディレクトリがドキュメントルートになるかvimはわからないので開くことができません。

そこで以下の様な関数を定義して、ドキュメントルートをあらかじめ指定しておくことで絶対パスのファイルでも開けるようにしました。

" HTMLとかでドキュメントルートからの絶対パスのファイルを開く(gfみたいな感じで)
" 絶対パスじゃなかったら(/で始まってなかったら)gfと同じ
" ドキュメントルートのディレクトリは配列で複数指定できる。

let s:root_dirs = [$HOME.'/dev/site/localhost/test']
function! GotoAbsFile()
    let filename = expand('<cfile>')
    let filepath = filename
    if (match(filename, '^/') != -1)
        for dir in s:root_dirs
            if match(expand("%:p:h"), dir) != -1 && isdirectory(dir) == 1
                let filepath = dir . filename
                break
            endif
        endfor
    endif
    if filereadable(filepath)
        execute 'edit ' . filepath
    else
        echohl ErrorMsg
        echo 'no such file ' . filename
        echohl None
    endif
endfunction
nnoremap gaf :<C-u>call GotoAbsFile()<CR>

カレントファイルのディレクトリを見て設定したディレクトリと合っているところから探すので複数ドキュメントルートを設定できるようにしてます。それと絶対パスじゃなかったら相対パスを探すので絶対パスと相対パスでコマンドを使い分ける必要もないです。

追記: 合わせて読みたい

Vimで"gf"をスラッシュで始まる相対URLに対応させる - Weblog - hail2u.net

このエントリーをはてなブックマークに追加