数値増加マクロはすでにいくつか実装があるんですが(
Macro/カテゴリ - SakuraEditorWiki の 文字列操作→連番 あたり)、自分好みのものがなかったので作りました。
increment.pls
残念ながら PerlScript ですので、ActivePerl は必須です。(でも日本語を含まないのでパッチを当てたりはしなくて OK です。)
■特徴
カーソルの前行、前々行を元に数値を増加 or 減少させた行を挿入します。
・10 進数のみに対応(16 進数には非対応)
・正数⇔負数の変換があるケースは非対応
複数行のケースにも対応しています。
■基本的な使い方
上記の説明だとわかりにくいと思いますので、具体的な例で説明します。
まずベースとなる行を 2 行用意しておいて、その次の行にカーソルを置いておきます。
この状態でマクロを実行すると・・・
こんな感じで、1 行目と 2 行目の値の差とって勝手に増加してくれます。2 増えてたら 2 増やすし、5 減ってたら 5 減らす感じです。ちなみに先頭に 0 がある場合はちゃんとそれも考慮します。
後述するように 2 行目に相当する部分を選択している状態でも実行は可能ですので、連続実行でどんどん行を増やしていくことができます。上記の状態で再度実行すると・・・
こんな感じです。
■ちょっと進んだ使い方
複数行で使いたい場合がたまにあるので、このようなケースにも対応しています。(というか今回は複数行対応しただけだったりします。
履歴 を見るとわかりますが、1 行単位の処理は 2〜3 年前に作ってたり。)
複数行のデータを同一のフォーマットで用意しておいて、最新のデータを選んだ状態で・・・
マクロを実行すると・・・。
このように、ちゃんと増加された値が出力されます。実は初めに書いた「前行と前々行の差分をとって〜」という使い方ができるのは、マクロの最初で「範囲選択状態でない場合は前の行を選択する」という処理が入っているからです。
■注意点
数字(0〜9)以外の箇所が異なっている場合は、どういうデータを挿入していいかわかりませんのでエラーにしてしまっています。
たとえば、
のように符号が逆転している状態で実行すると(この例は一番右が -5 になってしまってます)
というようなエラーになってしまいます。「異なっている場合は最終行を採用する」という形にすることもできるのですが、安全重視のためにこうしてます。
また、範囲選択する場合は、範囲選択の開始位置と終了位置を両方とも行頭にしておいてください。(どちらから範囲選択を開始しても OK です。)
たとえば、
となっていると実行できるのですが、
のように行頭〜行末の選択(※改行マークが選択状態になっていないのに注意)になっていると、
というエラーで落としています。これは、複数行選択のときに正しく解析できるようにするためです。
■便利な使い方
結構使用頻度が高い&連続実行する機会が多いので、私は Ctrl+; に割り当てて使っています。
方法は以下のページに載っています。
Macro/マクロファイルの実行 - SakuraEditorWiki
■スクリプトについて
最近は Perl の特徴を使ったもの以外は .js(あるいは .vbs)でマクロを書くようにしてるんですが、
・split() 時にキャプチャも同時に行える
・sprintf() で簡単に整形できる
という理由で PerlScript のままにしています。
といっても外部ファイル/モジュールの利用や、文字コード変換等を行っているわけではないので、ちょっとがんばれば .js への移行もできると思います。気が向いた方はやってみてください。
また、「JIS(ISO-2022-JP)で保存してね」というのが面倒だったので、コメントは英語もどきで書いてます。変な英語があったらご指摘ください。