Vimではファイル名らしき箇所でgfを押すと、見つけることができればそのファイルを開いてくれる。この機能はとても便利なのだが、HTMLファイルにスラッシュで始まる相対URLでCSSファイルやJavaScriptファイルのURLを書いた場合は、そこでgfを押してもうまく開くことができない。これを解決するためにvimでHTMLとかを編集するときに絶対パスのファイルを開くで公開されているプラグインをちょっと使っていたのだけど、どうやらpath
オプションとincludeexpr
オプションを設定することでも対応できるようだ。Vimすげー。
とりあえず設定から。
autocmd FileType html :setlocal path+=W:/www/test,W:/www/hail2u.net,W:/www/blosxom.info
autocmd FileType html :setlocal includeexpr=substitute(v:fname,'^\\/','','')
W:/www/test
等のパスはカンマ区切りで自分の環境に合わせて必要なだけカンマで区切って書く。追加するパスはサイトのトップページのあるディレクトリ(フォルダ)のパス。ややこしく言うならウェブサイトのドキュメント・ルートに対応するローカル(またはリモート)のファイルシステム上のパス。
デフォルトでは以下のように書くとgf
で開くことができない。
<script type="text/javascript" src="/scripts/twitter/speech-bubble.js"></script>
ファイルシステム上のルートとドキュメント・ルートが一致しないため/scripts/twitter/speech-bubble.jsの上でgfを押しても「ファイルがありません」と怒られるだけ。:help gf
によるとgfは以下のようにしてファイルを探しているようだ。
isfname
オプションに従ってカーソルの前後からファイル名を抜き出すpath
オプションに従ってファイルを探すsuffixesadd
オプションに従って接尾語を付けファイルを探すincludeexpr
オプションに従ってファイル名を変更しファイルを探すポイントになるのは2と4で、この2つのオプションをうまく設定してやると開くことができるようになる。まずpath
にドキュメント・ルートに対応するファイルシステム上のパスを追加してやり、ドキュメント・ルートからの相対パスをなんとなく解釈できそうな感じに準備する。このままではまだスラッシュ始まりに対応できないので、今度はincludeexpr
で頭のスラッシュを削除してやる。というわけで上記のような設定になる。after/html.vimとかの使い方をいまだにちゃんと覚えていないのでautocmd
ばっか使ってる……。
上位ディレクトリの参照はセミコロンを使えばできるということを教えてもらった。なのでpath
オプションの設定は、
autocmd FileType html :setlocal path+=;/
というシンプルなものでもいける。こっちの方が誤爆も無さそうだし良さそう。