HTML のスペシャルキャラクタをエスケープする Vim スクリプトを書いた。
:[range]call EscapeHTMLSpecialChars()
として使う。
<p>hoge & foo</p>
をエスケープすると
<p>hoge & foo</p>
となる。関数の内容は以下のとおり。初めて Vim スクリプトを書くにあたり、他のスクリプトを参考にしたり usr_41.txt を読んだりした。
function! EscapeHTMLSpecialChars() range let n = a:firstline while n <= a:lastline let target = getline(n) let target = substitute(target, "\&", "\\&", "g") let target = substitute(target, "<", "\\<", "g") let target = substitute(target, ">", "\\>", "g") call setline(n, target) let n = n + 1 endwhile endfunction
当初は以下のように書いたのだが、マッチする文字が無い時に出るエラーメッセージが邪魔なので、組み込み関数を使った。
function! EscapeHTMLSpecialChars() s@&@\&@g s@<@\<@g s@>@\>@g endfunction