HTML のスペシャルキャラクタをエスケープする Vim スクリプトを書いた

HTML のスペシャルキャラクタをエスケープする Vim スクリプトを書いた。

:[range]call EscapeHTMLSpecialChars()

として使う。

<p>hoge & foo</p>

をエスケープすると

&lt;p&gt;hoge &amp; foo&lt;/p&gt;

となる。関数の内容は以下のとおり。初めて Vim スクリプトを書くにあたり、他のスクリプトを参考にしたり usr_41.txt を読んだりした。

function! EscapeHTMLSpecialChars() range
let n = a:firstline
while n <= a:lastline
let target = getline(n)
let target = substitute(target, "\&", "\\&amp;", "g")
let target = substitute(target, "<", "\\&lt;", "g")
let target = substitute(target, ">", "\\&gt;", "g")
call setline(n, target)
let n = n + 1
endwhile
endfunction

当初は以下のように書いたのだが、マッチする文字が無い時に出るエラーメッセージが邪魔なので、組み込み関数を使った。

function! EscapeHTMLSpecialChars()
s@&@\&amp;@g
s@<@\&lt;@g
s@>@\&gt;@g
endfunction