概要
表題の通り、Vimの強力なテキスト編集機能をWindowsのバッチ処理で多数のファイルに一括適用するのが目的。新サイトへの移行時に大変助かったので、忘れないようにメモしておく。
前提
Vimは「C:\apps\vim\」にインストールしているものとする。場所が違う場合は適宜読み替えていただきたい。
用意するファイル
run.bat
対象ファイルの拡張子が.htmlの場合、以下のように記述する。拡張子が異なる場合1行目の*.html
を対象のものに変更のこと。
for %%i in (*.html) do ( C:\apps\vim\vim.exe -e %%i +"source .\replace.dat" +"wq" )
replace.dat
以下は一例。
:normal gg10ddG5kdG
:normal
コマンドは引数として与えられた文字列をノーマルモードにおけるキーボード入力として解釈する。上記例におけるgg10ddG5kdG
の場合、以下のように解釈される。
gg
でファイルの先頭へカーソルを移動10dd
で先頭から10行削除G
でファイルの末尾へカーソルを移動5k
で5行上へカーソルを移動dG
でカーソルの地点から末尾までテキストを削除
上記は行数の決まっているヘッダとフッタを削除するような処理を想定している。文字列置換を行う場合は、例えば以下のような記述になる。
:%s/^ //g :%s/^\n\n/^M/g
1行目は「行頭の全角スペースを削除」、2行目は「2つ連続した改行を一つにまとめる」の意味(*1)。replace.datにはVimのexモードで使えるコマンドをそのまま書き込めるので、通常のファイル編集で行っている操作はほぼすべて実行できる。
使い方
処理対象のファイルを格納しているフォルダにrun.batとreplace.datを配置し、run.batをダブルクリックもしくはコマンドプロンプトから.\run.bat
と入力後Enterキーを押下して実行する。対象ファイルは上書きされるので、実行前にバックアップを取っておくことを強く推奨する。
補遺
メモはWindowsのバッチファイルを前提に記載しているが、バッチ処理にしてもVimの処理にしても基本的な要素の組み合わせなので、MacやLinuxのシェルスクリプトでも同様のことは実現できるはず。
ここでは便宜上画面に表示される「
^M
」と記載しているが、実際には<C-v><C-m>
(Ctrlキーを押しながらvキーを押下し、続けてCtrlキーを押しながらmキーを押下。一連の操作でCtrlキーからは指を離さない)と入力する必要がある。