サクラエディタ外部マクロのPerlスクリプト

サクラエディタではユーザーが作成したマクロを登録でき、キーマクロ(mac)や、その他WSH(Windows Scripting Host)で使用可能なスクリプト言語(js, vbs等)を使って記述することもできる。
WSHがサポートしていればPerlスクリプト(pls)も使えるので、それで複雑な文字列操作マクロを作成し、コマンドとして実行することもできる。
以下は選択文字列の前後にHTMLタグを挿入するマクロ。

# tag_sub.pls
$name = 'sub';
if (IsTextSelected() == 0) {
	InsText("<$name></$name>");
} elsif (IsTextSelected() == 1) {
	InsText("<$name>" . GetSelectedString(0) . "</$name>");
}
ReDraw(0);

変数$nameの内容を変えれば、色んなタグに応用できる。
キーマクロでも記述できるが、以下のような手順となる。

  • 選択文字列をカットする。(クリップボードの内容が選択文字列に書き換わる。カーソルは選択文字列のあった位置になる。)
  • カーソル位置に始点タグを挿入する。(カーソルが始点タグの直後に移動する。)
  • クリップボードから選択文字列をペーストする。(カーソルが選択文字列の直後に移動する。)
  • カーソル位置に終点タグを挿入する。(カーソルが終点タグの直後に移動する。)

選択文字列をカット&ペーストする操作が必要であり、クリップボードを書き換えてしまう。さらに、1操作で終わらないため、後戻りする際、何回もアンドゥする手間が掛かる。また、後戻りする途中で元の選択文字列が一旦消えるため、中断したまま他の作業をすると、元の選択文字列が戻ってこない危険性がある。
その点、上記のPerlスクリプトで選択文字列部分を一度に置き換えてしまえば、変数が使えるのでクリップボードを使わずに済み、1操作で終わるため、1回のアンドゥで済む。何より、タグ挿入を一連の不可分な操作として考えた場合、実際の動作上でも1回の操作として扱うため、直観的で分かりやすい。