定期的に置換コマンドを実行するのが面倒だったので自動化した。
方法
次のスクリプトを .vimrc
に追記すれば良い。
autocmd BufWritePre *.tex :call FixPunctuation()
function! FixPunctuation() abort
let l:pos = getpos('.')
silent! execute ':%s/。/. /g'
silent! execute ':%s/、/, /g'
silent! execute ':%s/\\\@<!\s\+$//'
call setpos('.', l:pos)
endfunction
説明
autocmd
BufWritePre
、つまりバッファを保存する直前に置換コマンドを実行(FixPunctuation()を呼び出し)している。
FixPunctuation()
置換をだた実行するだけだと、置換対象の文字列が見つからなかった時、
E486: パターンは見つかりませんでした
というエラーが出る。silent!
をつけるとこれを表示させなくできる。
また、置換はカーソルの位置を変更してまう。これを防ぐためには keepjumps
をつければ良いらしいのだが、なんかうまくいかなかったので、getpos()
, setpos()
を利用して制御した。
3 つめの置換は、余分な空白を除去する置換である。
この置換しなかった場合、
置換前
ホゲホゲ、フガフガ。ぴよぴよ。
置換後
ホゲホゲ, フガフガ. ぴよぴよ.[余分な空白1つ]
となってしまう。この置換はbronson/vim-trailing-whitespaceを参考にした。