[要望]検索・置換における「選択した範囲No.18642
TaMaT さん 05/01/07 10:58
 
いつも秀丸&鶴亀を使わせていただいております、TaMaTと申します。
緊急性は非常に低いのですが、ひとつ要望をさせてください。

検索・置換ダイアログにおいて「選択した範囲内のみ」というチェックボックスがあ
ります。
現在の秀丸の仕様では、ダイアログ呼び出しの際にまさに選択範囲が存在し、かつそ
の範囲中(末尾以外)に改行コードが含まれる場合にはこのチェックボックスが自動で
ON、そうでなければこのチェックボックスは自動でOFF、となっていると思います。

この仕様は、「コピーの後に範囲選択を解除しない」設定において
クリップボードへコピー -> ダイアログを開きペースト -> 検索・置換
という動作を求める場合(選択範囲は存在するが処理対象は選択範囲に限定されては
いないため)理に適ったものであります反面、
「コピーの後に範囲選択を解除する」設定においてはあまり理に適ったものであると
は感じません。
「コピーの後に範囲選択を解除する」設定をし、かつその上で意図的に範囲選択をし
た状態でダイアログを呼び出すということは、
もはや「その範囲だけを検索・置換したい」という意思表示……であるかのように自
分は使っているからです。

長々と書きましたが、結論としましては以下のようになります。
「検索・置換ダイアログが表示される際、選択範囲があるなら(選択範囲に改行コー
ドが含まれるか否かによらず)必ず「選択範囲のみ」チェックボックスをONにするよ
うな設定がほしい」
以上です。

前述のとおり緊急性は非常に低いですので、御手隙のころにでも対応していただけま
すと幸いです。

[ ]
RE:18642 [要望]検索・置換における「選択No.18643
アルビレオ さん 05/01/07 12:13
 
秀丸ユーザーのアルビレオです。

>この仕様は、「コピーの後に範囲選択を解除しない」設定において
>クリップボードへコピー -> ダイアログを開きペースト -> 検索・置換
>という動作を求める場合(選択範囲は存在するが処理対象は選択範囲に限定されては
>いないため)理に適ったものであります反面、
>「コピーの後に範囲選択を解除する」設定においてはあまり理に適ったものであると
>は感じません。
>「コピーの後に範囲選択を解除する」設定をし、かつその上で意図的に範囲選択をし
>た状態でダイアログを呼び出すということは、
>もはや「その範囲だけを検索・置換したい」という意思表示……であるかのように自
>分は使っているからです。

この内容を読む限りは気づかれていないように思えるのですが、改行を含まない
範囲選択をした状態で検索・置換のダイアログを開くと選択した範囲が検索文字
列としてセットされます。
この機能は「コピーの後に範囲選択を解除しない」がON/OFFどちらでも非常に便
利なので、検索・置換の範囲指定という扱いになると困る人は多いと思われます。
検索文字列指定のつもりで選択した範囲しか検索しないというのはどう考えても
無意味でしょうから。

[ ]
RE:18643 [要望]検索・置換における「選択No.18644
TaMaT さん 05/01/07 13:57
 
>この内容を読む限りは気づかれていないように思えるのですが、改行を含まない
>範囲選択をした状態で検索・置換のダイアログを開くと選択した範囲が検索文字
>列としてセットされます。

まずこの挙動については認知しています。
しかしこれは思考の問題ですのでどちらが良い悪いではなく平行線に終わると思われ
ます。

なぜなら、「検索対象となるワードを選択する範囲」と「検索対象となる範囲を選択
する範囲」は異なりますから、ひとつの範囲選択行為に究極的に簡略化(同一化)はで
きません。
現在の挙動は、前者を利用すると暗黙的に後者はあきらめる挙動となっているわけです
(もちろん、このアプローチは、「たいていの場合単純な全体検索・置換であろう」
の前提に基づいては妥当です)。

あとは単純にどちらを優先するか、という当人の思考次第かと思います。
「このワードを」「検索・置換したい」を最優先
--> ご指摘の挙動は妥当です。
「この範囲で」「このワードを」「検索・置換したい」を最優先
--> ご指摘の挙動では不可能です。
「このワードを」「この範囲で」「検索・置換したい」を最優先
--> ご指摘の挙動では不可能です。

自分は職業柄範囲置換を大目に使うこともあり、「範囲」には非常に気を使います
(置換について範囲指定を誤り全体置換になると大変なこととなるため)。
それゆえ、
まず検索対象ワードはクリップボードにコピー、検索対象範囲は範囲選択してからダ
イアログを開く(範囲選択しなければ全体対象)、ダイアログへの検索対象ワードはク
リップボードからペースト、という思考をしてしまっています。

(まあぶっちゃけ言ってしまえば、ここで
「1行だけ」選択して検索・置換すると「選択した範囲内のみ」ではなく全文検索・
置換されてしまう、
「2行以上」選択して検索・置換すると「選択した範囲内のみ」である、
の挙動で戸惑うことが多い、というのが今回の本題となります)。


>この機能は「コピーの後に範囲選択を解除しない」がON/OFFどちらでも非常に便
>利なので、検索・置換の範囲指定という扱いになると困る人は多いと思われます。
>検索文字列指定のつもりで選択した範囲しか検索しないというのはどう考えても
>無意味でしょうから。

まず確認ですが、現在の挙動を根本的に変えて現在の挙動は不可能にしてくれという
要望ではありません。
単純にオプションをひとつ追加し、それによって「選択した範囲内のみ」チェックボ
ックスの挙動を変更できるようにしてほしい、という要望です。
もちろん、既存挙動と排他的な追加仕様側は「使いたければ使えばいい」であり、デ
フォルトはOFF(既存挙動のまま)でけっこうです。

[ ]
RE:18644 [要望]検索・置換における「選択No.18645
アルビレオ さん 05/01/07 15:26
 
アルビレオです。

>>この内容を読む限りは気づかれていないように思えるのですが、改行を含まない
>>範囲選択をした状態で検索・置換のダイアログを開くと選択した範囲が検索文字
>>列としてセットされます。
>
>まずこの挙動については認知しています。
>しかしこれは思考の問題ですのでどちらが良い悪いではなく平行線に終わると思われ
>ます。

そうですか。失礼しました。
一応言い訳しておくと丁寧に書かれている割には「理にかなっているか」という
ことよりも使い勝手の点で大きな問題と思われる
>「このワードを」「検索・置換したい」を最優先
>「このワードを」「この範囲で」「検索・置換したい」を最優先
のどちらを重視するかという機能の衝突にまったく触れられていなかったので、
そういう機能があることをご存じないのかと勘違いしてしまったわけでして…

>まず確認ですが、現在の挙動を根本的に変えて現在の挙動は不可能にしてくれという
>要望ではありません。
>単純にオプションをひとつ追加し、それによって「選択した範囲内のみ」チェックボ
>ックスの挙動を変更できるようにしてほしい、という要望です。
>もちろん、既存挙動と排他的な追加仕様側は「使いたければ使えばいい」であり、デ
>フォルトはOFF(既存挙動のまま)でけっこうです。

了解しました。
オプションの追加については別に異論はありませんが、どうせならマクロのほう
で searchdialog, replacedialog にinselect,regular,casesense などのオプシ
ョンを指定できるようにすればより幅広く使えていいかなぁと思いました。

TaMaTさんの場合は
replacedialog inselect;
といった1行だけのマクロを書いて適当なキーに登録しておけばいいわけです。
簡単に設定できるほうがいいか、幅広くいろんな用途に使えるほうがいいかとい
う選択になりますが。

[ ]
RE:18645 [要望]検索・置換における「選択No.18646
TaMaT さん 05/01/07 15:59
 
>アルビレオです。
>そうですか。失礼しました。
>一応言い訳しておくと丁寧に書かれている割には「理にかなっているか」という
>ことよりも使い勝手の点で大きな問題と思われる
>>「このワードを」「検索・置換したい」を最優先
>>「このワードを」「この範囲で」「検索・置換したい」を最優先
>のどちらを重視するかという機能の衝突にまったく触れられていなかったので、
>そういう機能があることをご存じないのかと勘違いしてしまったわけでして…

いえ、こちらこそはじめが言葉足らずで申し訳ありませんでした。
自分の使い方を前提とした話をしてしまいました。


>了解しました。
>オプションの追加については別に異論はありませんが、どうせならマクロのほう
>で searchdialog, replacedialog にinselect,regular,casesense などのオプシ
>ョンを指定できるようにすればより幅広く使えていいかなぁと思いました。

>TaMaTさんの場合は
>replacedialog inselect;
>といった1行だけのマクロを書いて適当なキーに登録しておけばいいわけです。
>簡単に設定できるほうがいいか、幅広くいろんな用途に使えるほうがいいかとい
>う選択になりますが。

searchdialog,replacedialogにinselectなどは指定できます。
指定した場合、選択範囲が存在すればチェックON、存在さえしなければチェックOFF
となります。
しかし、このようにした場合、当方が希望しております「選択範囲が存在する場合"
選択範囲のみ"は常に有効」
(暗黙的表現ですが)それ以外の大文字小文字区別、正規表現検索などの検索オプショ
ンは
既存どおり"前回検索・置換した際の設定を引き継ぐ"とはならず、
明示的にオプションで指定しない限り強制チェックOFFになったはずです
(もしも現行バージョンでの挙動がそうならない場合はご指摘ください)。
ここでオプション状態を保存/取得/リストアするとなると……面倒そうなので着手し
ていません。


「「コピー」の後に範囲選択を解除する」の選択肢が提供されている以上、製作者様
側のポリシーとしましては
ユーザの利便性が高ければ実現ルートは複数あってもよい、と考えてらっしゃると思
いますので、
とりあえず前述のとおり緊急性は非常に低いですが希望してみました次第です。

[ ]
RE:18646 [要望]検索・置換における「選択No.18647
TaMaT さん 05/01/07 16:15
 
何度も申し訳ありません、TaMaTです。
最新版秀丸で状況を調べなおしましたので、事後報告です。

検索においては、いつの間にか"find2"メソッドが追加されていますね。
マクロで
forceinselect 1;
find2;
とすれば、自分が希望している挙動が達成できそうです。

置換については、"replace2"のようなメソッドがないので簡単な実現は不能……かな?

[ ]
RE:18647 [要望]検索・置換における「選択No.18649
秀丸担当 さん 05/01/07 17:53
 

以前にも他の方からも似た要望があり、動作環境にご要望の動作を追加すること
は、必要かもしれません。
しかしあまり動作環境にチェックボックスを追加ばかりしたくないというのもあ
ります。
検討させていただきます。

>置換については、"replace2"のようなメソッドがないので簡単な実現は不能……かな?

これは、find2がsearchoptionも反映しているので、setsearchのフラグのビット
2を有効とすることで、find2が置換ダイアログになります。
setsearch "a",2;
setreplace "b";
find2;
という感じになります。

ヘルプには、find2はsearchbufferとforceinselectが反映されることし書かれて
いないので、searchoptionも反映されることを書くようにしたいと思います。

[ ]