miau's blog?

PerlReplace

ということで早速 PerlScript で作ったサクラエディタのマクロ。

PerlReplace Ver 1.0
PerlReplace Ver 1.1(Ver 1.5.7.1 以降用)
PerlReplace Ver 1.2(矩形選択対応)

選択範囲の文字列を Perl で置換します。
複数行置換だろうと何だろうとできるのがポイント。

・PerlReplace.pls
 単純版。
 正規表現で置換式を指定してやってください。
 tr に変えて使っても OK です。

・PerlReplace2.pls
 PerlReplaceBox.pl とセットで使います。
 PerlReplace.pls に比べると、それっぽい GUI になっています。
 (2005/09/19 修正)
Ver 1.0 の PerlReplace2.pls は問題があるので使用しないでください。
 編集中のファイルのパスを元に PerlReplace.pl を探しに行くので、(無題)を開いている状態でこのマクロを実行すると落ちます。

 
PerlReplace2

以下、ちょっと詳細。



■概要

サクラエディタの弱い(?)ところとして、複数行置換できない点があります。
秀丸なんかは 3 行くらいの制限はあるものの、一応複数行置換できるわけで。
(最近のはどうなってるか知らないけど)

それに対応すべく作ったのが PerlReplace.pls です。
このマクロを使えば、複数行に渡る HTML タグを除去したりできます。


■補足

Perl の正規表現に詳しくない方のために、一応補足。

s/<正規表現パターン>/<置換後文字列>/<オプション>

の形で指定してください。

/g オプションはグローバルマッチのオプションなので、基本的につけるようにしてください。
(これをつけないと、最初の一個しか置換されません)

"\r" が CR に、"\n" が LF にマッチしますので、"\r\n" で普通の改行にマッチするはずです。

"." は通常 "\n" にマッチしませんが、/s オプションをつけることでマッチさせることができます。

s/<script[^>]*>.*?<\/script>//gs # script タグの除去

すべて一つの文字列に格納して処理していますので、"^" で行頭、"$" で行末にマッチさせるには /m オプションが必要です。

s/^#.*\n$//gm # "#" で始まる行を削除


Perl 正規表現は反則的に強力(Perl のコード実行までできたりする)ので、

s/(.*)\t(.*)\t(.*)\r/lc($3)."\t$2\t$1\r"/eg

こんな感じで特定部分を小文字に変えたりとか、いろいろ拡張できます。

PerlReplace2 は若干不安定な気がするので、PerlReplace.pls のほうを使ったほうがいいかもしれません。

PerlReplace.pls のほうはデリミタも自分で指定できるので、

s#/usr/local/bin/perl#/usr/bin/perl#g

みたいにできて便利ですし。


■メモ

PerlReplace2.pls では Tk モジュールを使ってますが、そのへんの情報源もメモ。

M.Hiroi's Home Page / Perl/Tk memo
基本はここで学びました。

Perl/Tk : Tk ウィジェット : Entry
ボタン等をうまく配置できなかったので、ここを参考にしました。


■雑感

履歴が残らないと、ちょっと辛いですよね。
とりあえず実行の前に置換式をクリップボードに入れておいたほうがいいかもしれません。

本当はサクラエディタ側で汎用 HistoryCombo(履歴機能付コンボボックス)を備えたダイアログとか準備してくれると楽なんだけど。
呼び出すときに ID を指定すると、ID 毎に ini ファイルに履歴を残してくれるとか。


それにしても、Perl で WSH 使えるようになったのはかなり良いです。
VBScript とか JavaScript とかの勉強がさらに疎かになっちゃいそう。

あと、サクラエディタが便利になりすぎて、他のエディタや IDE を使うのに苦労しそう。
いいような悪いような。


■さらに補足

サクラエディタってマクロの使い方がわかりにくいので、一応やり方を紹介。

(1) sakura.exe と同階層にマクロファイルを突っ込む
(2) 共通設定(Ctrl+6)→「マクロ」タブを選択
(3) 上のリストボックスで空の部分を選ぶ
(4) File で対象のマクロを指定して、名前も適当につける
(5) 開発中のマクロであれば「マクロを実行するたびにファイルを読み込みなおす」のチェックも入れておく
(6) 「設定」ボタンをクリック
(7) 「OK」で終了

で、呼び出すときは「ツール(T)」→「登録済みマクロ(B)」から実行。
よく使うようであれば、適当にショートカットを割り当てるといいかも。

PPA マクロだと ppa.dll も必要なので気をつけてください。


■Vesion 1.1 について

ちょっと使っていて不便だった点を変更しました。

・範囲選択されていない場合はあらかじめ全選択して処理
・置換時に、置換式をクリップボードに保存
・クリップボードの内容が置換式っぽければデフォルト値として使用

こんな感じです。邪魔だったらその付近の処理を消してやってください。


また、PerlReplace2.pls には不具合があったのですが、

サクラエディタ開発掲示板 [4044] カレントマクロのパス取得 他

この変更を適用すれば、
サクラエディタ 1.5.7.1 以降(※1.5.7.0 には不具合あるので)を使えば、マクロファイルのパスを元に外部スクリプトを起動できるようになりますので、問題が発生しなくなります。
(Ver 1.1 の PerlReplace2.pls と PerlReplaceBox.pl を同階層に置いて使用してください)

・・・とはいえ、一般の方に patch 適用→ビルドしていただくのも酷だろうということで、手元でビルドしたものを置いておきます。
sakura.exe
(正規版に取り込まれるまでの暫定ということで・・・。)
posted at 21:40:34 on 2005-09-13 by miau - Category: TextEditor 2 Trackbacks - Permalink

TrackBack

SEが薦める役に立つ フリーソフト & ソフト
初めての紹介 フリーソフト サクラエディタ: 最初に紹介するのは、何にするか色々かんがえたのですが 自分でも使用頻度が高い 「サクラエディタ」を紹介します。 みなさんは、標準で付いているメモ帳を使用 していませんか? 私も新人のときは、メモ帳を...
2005/10/18 01:01
日記 - chifumiさんのブログ - truefake@xoops
mixi足跡自動保存とおでんとふかわ: 最初にちょっとmixiの話。 mixiというサイトは、登録しないと見る事ができない。んで、誰かが日記を読んでくれたら、それが記録に残る。 それが結構微妙なもんで、「表面上は友達だけど、お互いの日記を読まない」...
2005/10/05 09:09
現在トラックバックは受け付けていません。

Comments

FILE wrote:

 こちらでは初めまして。

 今回、マクロ掲示板で「パス取得のマクロ関数はあったほうが良いかもしれませんね。」
という記述を見かけたので、慌てて(ひそかに暖めていた)差分を投稿いたしました。

> 要望を出そうと思って覗いてみたら、既に実装されているとは・・・。
 私は、マクロ側の対応が早くてビックリしました。

 Perlの環境は無いのですが、PerlReplace_1.1.0.zipをダウンロードさせていただきました。
 Perlらしからぬ(失礼)、きれいなコードにも驚かされました。
 時間のある時に、じっくり勉強させていただきます。

 またこちらにお邪魔させていただくかもしれませんが、その際にはよろしくお願いいたします。
2005-09-20 23:39:30

miau wrote:

お世話になってます。

>という記述を見かけたので、慌てて(ひそかに暖めていた)差分を投稿いたしました。

なるほどー。そういう事情だったんですね。
共通処理をモジュールとして切り出したり、PerlScript のバグに対応したりでずいぶん助かってます。
早く本家に取り込まれてくれると嬉しいんですけどね・・・。

また何かあればよろしくお願いします。
2005-09-23 04:07:41

maru wrote:

お世話様です。
スクリプト紹介のため、画像ファイル20050913-PerlReplace2.png頂きますね。
2006-08-17 18:37:49

miau wrote:

Wikiの更新お疲れ様です。
画像等は適当に持って行っちゃってくださいませ。
2006-08-18 08:21:30

laperki wrote:

Cipka
2006-08-31 02:10:17

Add Comments

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