emmet.vimでxhtmlを書く際、imgに閉じタグを付けたい(暫定対処

表題通り。<img />とか<br />とかしたい。

zen-coding.vimの時はなんとでもなってたのだけれど、emmet.vimに変えてからなんともならなかったので、力技でなんとなく対処。

参考:https://github.com/mattn/emmet-vim/issues/161

参考URLを見ると、.vimに

let g:emmet_html5 = 0

としろ、とある。単にhtml5設定を解除するということだと思うのだけど、当たり前だけどこれをやると今度はhtml5を書くときにも閉じタグがついてしまう。

なので、わたしは香り屋版vimを入れてほとんどそのまま使っていたので、filetype.vimを開くと、大体、857行目くらいにhtmlのfiletype設定がある。

これがありがたいことに、html, xhtml, Djangoの判別関数つきだったので、それを少し変える。

au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm,*.ejs call s:FThtml()

" Distinguish between HTML, XHTML and Django
func! s:FThtml()
 let n = 1
 while n < 10 && n < line("$")
 if getline(n) =~ '\<DTD\s\+XHTML\s'
 setf xhtml
 let g:emmet_html5 = 0
 return
 endif
 if getline(n) =~ '{%\s*\(extends\|block\|load\)\>'
 setf htmldjango
 return
 endif
 let n = n + 1
 endwhile
 let g:emmet_html5 = 1
 setf html
endfunc

xhtml宣言が見えたらファイルタイプをxhtmlにする~というような記述があったらg:emmet_html5に0を代入してやる。

ただ、動かしてみると分かるのだけれど、こうやって記述しても、一つのプロセスでxhtmlとhtmlを両方開いた場合、どちらか一方にしかならない(html時の1代入をなしにした場合は全てxhtmlになる)。

これは恐らく、g:emmet_html5に0が代入されたらその時点でxhtmlモードにする、と言う風になっているのだろうと思う(そうでなくてもこの書き方の場合、ファイルを開かないでbufferを変えただけ、などでは正常に動かないと思う)。

vim scriptは全然分からないし、xhtmlとhtmlを同時に編集することはあまり多くないので、とりあえずこれで暫定対処。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です