|
むらやんさん今日は、ひろです。
> 行末にも「",」を付加しなければならないので、検索へ$のみ、置換えに",を入力し
> 置き返したところ、無限に同じ行へ",を追加してしまいます。
この β5 の動作に矛盾は有りませんし、不条理な仕様とは一概には言え無
いと思います。(根拠は後術します。) ただし「どの様な仕様にすると良い
か?」を問題として「使いやすい/実用的な仕様か?」と聞かれれば、直ちに
「否」と答えます。
個人的には、「$」だけ仕様を変えると、同じ行毎の処理を表す「^」と矛盾
してしまいます。そこで、正規表現の行頭行末の意味で「^」「$」を使用した
場合は、検索/置換/全置換/前下候補に関わらず、行毎の処理になった方がよ
いと思います。ただ「^」の仕様も変えたとき問題になるのは、(特にマクロ
の) 互換性でしょう。←この仕様変更で動きが変わるマクロが実際に有るとも
思えませんが...。
以下「β5 の動作に矛盾は無いし、不条理な仕様とは一概には言え無いと思
う」根拠です。長文ですので、読み飛ばして頂いて結構です。
まず比較のために、検索文字列が「^.」で置換文字列が「」(空) で全置換
を行います。すると改行以外の全ての文字が削除されます。これは一見おかし
な動きの気がします。しかし、ここで例えば、
ABCD
と文章があった場合、[全置換] ではなく [下候補] で置換していく場合を考
えます。すると最初は「A」が消され、その結果文章は、
BCD
となりカーソル位置は B、つまり行頭のままです。その為、 [下候補] で
「B」「C」「D」と順に消されていきます。そして秀丸は、sed のように一行
一行処理をしているライン・エディタではなく、スクリーン・エディタなので、
直前にどの様な処理をしたに関わらず、現在の画面の状況に対して処理をする
という現在のこの仕様もありだと思います。更に [全置換] は [下候補] を繰
り返した動作と同じ、というのが秀丸の仕様です。こう考えると、最初の「改
行以外の全ての文字が消える」というのが、秀丸の仕様上は正しい動作という
ことになります。
ここまでが前振りで、行末の話に戻ります。まず JRE32.DLL では「$」のみ
では行末にヒットしない、という仕様なので無視し、HmJre.dll の場合のみ考
えます。すると
ABCD
という文章に、検索文字列「$」置換文字列「",」としたとき、[下候補] を行
うと、
ABCD",
となりカーソル位置は「,」で行末のままです。ですからこの状態で更に [下
候補] とすれば、
ABCD",",
となります。そして [全置換] は [下候補] を再現するので、延々とこれを繰
り返す、ということになります。
|
|