miau's blog?

サクラエディタの数値増加マクロ(PerlScript)作った

数値増加マクロはすでにいくつか実装があるんですが(Macro/カテゴリ - SakuraEditorWiki の 文字列操作→連番 あたり)、自分好みのものがなかったので作りました。

increment.pls

残念ながら PerlScript ですので、ActivePerl は必須です。(でも日本語を含まないのでパッチを当てたりはしなくて OK です。)




■特徴

カーソルの前行、前々行を元に数値を増加 or 減少させた行を挿入します。
・10 進数のみに対応(16 進数には非対応)
・正数⇔負数の変換があるケースは非対応

複数行のケースにも対応しています。

■基本的な使い方

上記の説明だとわかりにくいと思いますので、具体的な例で説明します。

まずベースとなる行を 2 行用意しておいて、その次の行にカーソルを置いておきます。

increment1

この状態でマクロを実行すると・・・

increment2

こんな感じで、1 行目と 2 行目の値の差とって勝手に増加してくれます。2 増えてたら 2 増やすし、5 減ってたら 5 減らす感じです。ちなみに先頭に 0 がある場合はちゃんとそれも考慮します。

後述するように 2 行目に相当する部分を選択している状態でも実行は可能ですので、連続実行でどんどん行を増やしていくことができます。上記の状態で再度実行すると・・・

increment3

こんな感じです。

■ちょっと進んだ使い方

複数行で使いたい場合がたまにあるので、このようなケースにも対応しています。(というか今回は複数行対応しただけだったりします。履歴 を見るとわかりますが、1 行単位の処理は 2〜3 年前に作ってたり。)

複数行のデータを同一のフォーマットで用意しておいて、最新のデータを選んだ状態で・・・

increment_mul1

マクロを実行すると・・・。

increment_mul2

このように、ちゃんと増加された値が出力されます。実は初めに書いた「前行と前々行の差分をとって〜」という使い方ができるのは、マクロの最初で「範囲選択状態でない場合は前の行を選択する」という処理が入っているからです。

■注意点

数字(0〜9)以外の箇所が異なっている場合は、どういうデータを挿入していいかわかりませんのでエラーにしてしまっています。

たとえば、

increment_err1

のように符号が逆転している状態で実行すると(この例は一番右が -5 になってしまってます)

increment_err2

というようなエラーになってしまいます。「異なっている場合は最終行を採用する」という形にすることもできるのですが、安全重視のためにこうしてます。

また、範囲選択する場合は、範囲選択の開始位置と終了位置を両方とも行頭にしておいてください。(どちらから範囲選択を開始しても OK です。)

たとえば、

increment_sel1

となっていると実行できるのですが、

increment_sel2

のように行頭〜行末の選択(※改行マークが選択状態になっていないのに注意)になっていると、

increment_sel3

というエラーで落としています。これは、複数行選択のときに正しく解析できるようにするためです。

■便利な使い方

結構使用頻度が高い&連続実行する機会が多いので、私は Ctrl+; に割り当てて使っています。

方法は以下のページに載っています。

Macro/マクロファイルの実行 - SakuraEditorWiki

■スクリプトについて

最近は Perl の特徴を使ったもの以外は .js(あるいは .vbs)でマクロを書くようにしてるんですが、
・split() 時にキャプチャも同時に行える
・sprintf() で簡単に整形できる
という理由で PerlScript のままにしています。

といっても外部ファイル/モジュールの利用や、文字コード変換等を行っているわけではないので、ちょっとがんばれば .js への移行もできると思います。気が向いた方はやってみてください。

また、「JIS(ISO-2022-JP)で保存してね」というのが面倒だったので、コメントは英語もどきで書いてます。変な英語があったらご指摘ください。
posted at 15:15:36 on 2009-03-28 by miau - Category: TextEditor No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。