Ctrl + Shift + 上下キー の挙動

  1. 皆さん、いつもお世話になっております。
    質問失礼しますm(_ _)m。

    「Ctrl + Shift + 上下キー」を押した時、同じ表現箇所へとジャンプしてくれますが、デフォルトだと部分一致でジャンプしているように見えます。
    (以下のスクリーンショットのような感じです。)
    https://gyazo.com/4a4bc0055844b7a89f51735162b451c6

    私としては、単語単位で完全に一致した箇所にジャンプさせたいと考えています。
    上のスクリーンショットで言うと、Price_offset_Xだけにジャンプしたい(Price_offset_X1 にはマッチしてほしくない)と考えています。
    どこか設定を変えることで、そのような動作にすることは可能でしょうか?

    どなたかご存知でしたら教えていただけると幸いです。

    > sukemaruさん
    もし設定変更で実現できないようでしたら、sukemaruさんの「次/前の文字列を検索・改」マクロを試させていただこうかなと思っています(^^;。

     |  くま  |  返信
  2. > 私としては、単語単位で完全に一致した箇所にジャンプさせたいと考えています。
    > どこか設定を変えることで、そのような動作にすることは可能でしょうか?

    すでに「次/前の文字列を検索・改」マクロのページの長ったらしい説明を読んでいるようですからご存知かとおもいますが、Mery の仕様として「次/前の文字列を検索」コマンドでは「検索/置換」ダイアログ内のオプションの ☑ 状態が適用されますので、「検索」または「置換」を利用するごとにオプションフラグの設定状態が変わってしまいます。
    現状の Mery 本体には「次/前の文字列を検索」コマンドのオプションを決め打ちできるようにする設定項目はありませんので、なんらかのマクロを導入しない場合は…
     Ctrl+F で検索ダイアログを開く → Alt+W で「単語のみ検索する」を切り替える → Esc キーで検索ダイアログを閉じる
    とやってから「次/前の文字列を検索」するしかないとおもいます。

    この仕様にたいして拙作マクロは検索オプションをつねに決まった状態にして「次/前の文字列を検索」するためのものなのですが、もっとシンプルなマクロを利用する方法もご案内させていただきます。 :)

    https://www.haijin-boys.com/wiki/デフォルトの検索フラグを設定して検索ウィンドウ表示
    yuko さん作「デフォルトの検索フラグを設定して検索ウィンドウ表示」マクロで、以下のように検索フラグを設定し、最後の1行をコメントアウトして実行すると検索オプションを「自分にとって必用な状態」で上書きできます。
    これを何らかのショートカットキーに登録して実行してから通常の [ Ctrl+Shift+ ↓ または ↑ ] で「次/前の文字列を検索」コマンドを実行するという方法もありかとおもいます。 :)
    別々のオプションフラグ設定で別名保存した同マクロを複数登録して、ショートカットキーで使い分けるというのも便利そうですね。 :D

    e.g. 「単語のみ検索する」「文末まで検索したら文頭に移動する」だけを有効にする場合

    #title = "デフォルトの検索フラグを設定する"
    #tooltip = "検索フラグ:「単語のみ」「文末/文頭 ループ」"
    
    // ON にしたい検索フラグ (括弧内文字) を変数「f」に、「+」区切りで代入する
    // - 大文字と小文字を区別する (meFindReplaceCase)
    // - 正規表現を使用する (meFindReplaceRegExp)
    // - 単語のみ検索する ※「正規表現を使用する」と併用不可 (meFindReplaceOnlyWord)
    // - 文末まで検索したら文頭に移動する (meFindAround)
    
    // 正規表現 ON、文末まで検索後に文頭に移動 ON
    f = meFindReplaceOnlyWord + meFindAround;
    
    document.selection.Find('', f);
    
    // 検索ウィンドウを表示
    // editor.ExecuteCommandByID(2133);	// ← この行をコメントアウト
    
    
    // ※ そのまま「次 または 前の文字列を検索」コマンドを追加する場合
    editor.ExecuteCommandByID( 2136 );	// 「次」
    // editor.ExecuteCommandByID( 2137 );	// 「前」

    ※ 通常の検索/置換なら「☑ 正規表現を使用する」のほうが「☑ 単語のみ検索する」よりも優先されますが、「次/前の文字列を検索」コマンドでは「☑ 正規表現を使用する」オプションは無視されます。

     |  sukemaru  |  返信
  3. > もし設定変更で実現できないようでしたら、sukemaruさんの「次/前の文字列を検索・改」マクロを試させていただこうかなと思っています(^^;。

    拙作「次/前の文字列を検索・改」マクロの場合は、行番号クリック(またはトリプルクリック)で末尾改行つきの範囲選択をしている状態や、複数行選択している状態からでも「次/前の文字列を検索」を実行することができますので、重複行検索のジャンプもできます。
    (ちなみに、もともと矩形選択から使用する前提のマクロではありませんから、マルチカーソル機能には対応できなさそうな気がします…)

    ソースコードなどで決まりきった形式のフレーズのある行をねらってのジャンプがしやすいので、定型形式のコードブロックをさがしたり検索タグ代わりのコメント行を次々にたどったりできますね。
    データベースやログファイルのようにブックマークやアウトライン機能では管理しづらい(← パフォーマンス的に)長大なドキュメントでの利用にも向いているかとおもいます。

    「単語のみ検索する」オプションを組みこむにあたっては、検索ヒット数のステータス表示に反映させるのに苦労しましたので、もし拙作マクロがお役に立つようなら私にとってはこの上なく喜ばしいことです。 :D
     
     
    また、拙作マクロは
     ・デフォルトでは「単語のみ検索する」を オフ に設定し(var onlyWordEnable = false;)
     ・特定のファイル名のときだけ「単語のみ検索する」を 強制オン
    になるように改造することもできます。

    ▼追加▼ ~ ▲追加▲ の部分をソースコードに挿入してみてください。

    /* ... 【略】 ...  */
    
    var onlyWord   = onlyWordEnable   ? meFindReplaceOnlyWord : 0;
    var multiLines = ( multiLinesEnable && st.indexOf( "\n" ) > -1 );
    
    // ▼  追加  ▼ 	※ 特定のファイル名のときだけ「単語のみ検索する」を 強制オン
    onlyWord = ( d.Name == "hoge.txt" || "fuga.html" )
             ? meFindReplaceOnlyWord : onlyWord;
    // ▲  追加  ▲ 	※ ただし、複数行選択のときは 強制オフ
    
    onlyWord = ( multiLines || /\W/.test( st ) )
             ? 0 : onlyWord;
    
    /* ... 【略】 ...  */
     |  sukemaru  |  返信
  4. 連投ごめんなさい。
    ひとつ目のレスのコード内のコメント部分の訂正です。
    (正規表現 ON → 単語のみ検索 ON)

    // 単語のみ検索 ON、文末まで検索後に文頭に移動 ON
     |  sukemaru  |  返信
  5. sukemaruさん、こんにちは(^^)。
    毎度、丁寧なご回答をありがとうございます。

    ご説明によると、検索画面を呼び出してモード変更をするか、マクロを導入するしかないのですね。

    「デフォルトの検索フラグを設定して検索ウィンドウ表示」マクロもよさそうですが、せっかくなのでsukemaruさんの「次/前の文字列を検索・改」を使わせていただきます。

    ありがとうございました!

     |  くま  |  返信
スポンサーリンク