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

Posted at 2009-11-07T04:02:00+09:00 in Software

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は以下のようにしてファイルを探しているようだ。

  1. isfnameオプションに従ってカーソルの前後からファイル名を抜き出す
  2. pathオプションに従ってファイルを探す
  3. 見つからなかったらsuffixesaddオプションに従って接尾語を付けファイルを探す
  4. 見つからなかったらincludeexprオプションに従ってファイル名を変更しファイルを探す

ポイントになるのは2と4で、この二つのオプションをうまく設定してやると開くことができるようになる。まずpathにドキュメント・ルートに対応するファイルシステム上のパスを追加してやり、ドキュメント・ルートからの相対パスをなんとなく解釈できそうな感じに準備する。このままではまだスラッシュ始まりに対応できないので、今度はincludeexprで頭のスラッシュを削除してやる。というわけで上記のような設定になる。after/html.vimとかの使い方をいまだにちゃんと覚えていないのでautocmdばっか使ってる……。

追記@2009-11-10T12:48:31+09:00

上位ディレクトリの参照はセミコロンを使えばできるということを教えてもらった。なのでpathオプションの設定は、

autocmd FileType html :setlocal path+=;/

というシンプルなものでもいける。こっちの方が誤爆も無さそうだし良さそう。

Recent entries from same category

このエントリと同じカテゴリに投稿された最近10件のエントリです。

  1. Vimのcommandで-complete=custom(list)を使う
  2. gVimでメニューを読み込まない
  3. Google日本語入力でShiftキーで英数モードに
  4. FuzzyFinderでプレビューしつつ候補を選択
  5. WindowsのVimで開いているファイルを関連付けにしたがって開く
  6. Vimで#RRGGBBからrgb(r,g,b)に変換
  7. スマートキーワードは後ろが良い
  8. fenrirでTabを項目選択に使う
  9. Firefox 3.6以降でMS Pゴシックを無効にする
  10. git commitで既に起動しているgVimの新しいタブを開く

Comments

JavaScriptに対応、または有効な環境の場合、ここにこのエントリへのはてなブックマークコメントが表示されます。