トップページ 本棚 メモ帳 告知板 道具箱 サイトの表示設定 リンク集 Twitter

フォルダ内のファイルをVimで一括処理

Tags:
目次

概要

表題の通り、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の場合、以下のように解釈される。

上記は行数の決まっているヘッダとフッタを削除するような処理を想定している。文字列置換を行う場合は、例えば以下のような記述になる。

:%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のシェルスクリプトでも同様のことは実現できるはず。

*1:ここでは便宜上画面に表示される「^M」と記載しているが、実際には<C-v><C-m>(Ctrlキーを押しながらvキーを押下し、続けてCtrlキーを押しながらmキーを押下。一連の操作でCtrlキーからは指を離さない)と入力する必要がある。