[Mac] Sublime Text で置換をバッチ処理する

複数のテキスト置換を実行する状況はよくある。これまでは Sublime Text で何回も置換処理を繰り返すことで対応していた。

これをバッチ処理する方法を見つけた。

環境:Sublime Text 3.2.2, Build 3211

(1)Package Control をインストールする。

Sublime Text – Package Control のインストール – 開発メモ – Webkaru
https://webkaru.net/dev/sublime-text-package-control/

(2)以下から facelessuser/RegReplace を ZIP でダウンロード。

GitHub – facelessuser/RegReplace: Simple find and replace sequencer plugin for Sublime Text
https://github.com/facelessuser/RegReplace

解凍して RegReplace というフォルダ名にする。

(3)「Sublime Text>Preferences>Browse Packages」をクリック。パッケージ・ファイル用のフォルダーが開く。

2のフォルダを入れる。

(4)3と同じフォルダ内(RegReplace フォルダーと同じ階層)に 00-dependencies というフォルダを作成する。

(5)以下のページに載っているコードで 00-dependencies.py というファイル名でファイルを作成。4の中に入れる。

Installation – RegReplace Documentation
http://facelessuser.github.io/RegReplace/installation/

(6)Sublime Text を再起動。

(7)「Sublime Text>Preferences>Package Settings>RegReplace>Rules – User」をクリック。設定ファイルが開く。

以下の形式で置換ルールを登録していく。“literal”: “True” を付けることで、正規表現ではない通常のテキスト置換もできる。

{
  "replacements": {
    "ルール名": { "find": "検索対象パターン(正規表現)", "replace": "置き換え後パターン(正規表現)" },
    "ルール名2": { "find": "検索対象パターン2(正規表現)", "replace": "置き換え後パターン2(正規表現)" },
    "ルール名3": { "find": "検索対象パターン3", "replace": "置き換え後パターン3", "literal": "True" }
  }
}

検索および置換では通常の正規表現では \t とか $1 のように書くが、このプラグインでは \t や\1 のようにスラッシュを2つ重ねて書く。

command + s で保存。

(8)「Sublime Text>Preferences>Package Settings>RegReplace>Commands – User」をクリック。

以下の形式でコマンドを登録する。caption に設定するのがコマンド名なので、自由に命名すればいいが、Reg Replace: を頭に付けておくと分かりやすい。ルール名の部分は7のルール名をそのまま記入する。

[
  {
    "caption": "Reg Replace: コマンド名",
    "command": "reg_replace",
    "args": {
      "replacements": [
        "ルール名",
        "ルール名2",
        "ルール名3"
      ]
    }
  }
]

command + s で保存。

(9)command + shift + p でコマンドパレットを表示。8で登録した caption 名で検索してコマンドを実行すれば、対象テキストの置換バッチ処理ができる。

選択範囲がある場合、選択範囲のみでのバッチ処理を実行するには、「Sublime Text>Preferences>Package Settings>RegReplace>Settings」をクリック。右側のユーザー設定に “selection_only”: true を追加すればいい。

複数の置換バッチ処理を登録して使い分けることはできないかといろいろやってみたが、その方法は分からなかった。

参考:
Batch search and replace multiple strings at once? – General Discussion – Sublime Forum
https://forum.sublimetext.com/t/batch-search-and-replace-multiple-strings-at-once/25088/3

RegReplace/quickstart.md at master · facelessuser/RegReplace · GitHub
https://github.com/facelessuser/RegReplace/blob/master/quickstart.md

Sublime Textで正規表現による置換パターンを登録する | 世界を変える男-やまだたろう-
https://sekaiokaeru.com/tips/sublime-regreplace-pattern