サクラエディタのマクロ機能を使って特定文字列を含む行を削除する

私は普段、サクラエディタをよく使っているのですが、開いているテキストの

特定の文字列を含む行を一括で削除したい、という場面に出くわします。

 

例えば、grepした結果から、svnのファイルを除外するために"svn"という

文字列を含む行を削除したい!といったような経験は無いでしょうか?

なかったとしても話を進めましょう。

 

という訳で、

サクラエディタにはマクロ機能があるので、このような「特定の文字列(選択状態の文字列)を含む行を一括削除」する

機能を組んでしまえば、一発で出来てラクチンじゃないかと思い、作ってしまうことにしました。

 

 

マクロに使用できる関数については、
http://www.geocities.jp/maru3128/SakuraMacro/
等を参照してください。(ジオシティーズ…)
ざっと見ればわかる通り、サクラエディタに備わっている機能が大体使えるようになっていると思います。

 

// 選択範囲のテキストを取得
var text = Editor.GetSelectedString(0);
// 変換後のテキストを出力
if ( text !== '' ) {
    text = '.*' + text + '.*\r\n';
    Editor.ReplaceAll(text, '', 4);
    Editor.ReDraw(0);
}


今回使用した関数は、選択部分の文字列を取得するS_GetSelectedString()と
文字列すべて置換を行うS_ReplaceAll()です。
(あと画面を再描画するためにS_ReDraw()も使ってますが)

 

置換したい文字列を選択した状態でマクロを呼び出すと、S_ReplaceAll()によって変数に設定されるので、
これに対して行末までを置換対象とするように正規表現による修飾を行っています。

 

S_ReplaceAll()の引数は(置換前の文字列,置換後の文字列,オプションビット)となっており、

第3引数の4は正規表現を有効とすることを表しています。

これを.jsファイルとして保存し、[ツール]-[名前を指定してマクロ実行]から実行すれば…

 


これで一操作で気軽に行削除できるようになりました。

満足のいく操作が実現出来たら、[共通設定]ダイヤログから[登録済みマクロ]として登録してしまえば、さらに便利に。

これで作業も捗ります。