インクリメンタル検索で現在の一致を選択する(つまり、領域として)


9

で文字列を検索するときC-s、キーを押して検索モードを終了できるようにしながら、一致の選択を維持したいと思いますそうすれば、すぐに入力を開始して、最後の一致を置き換えることができます。

たとえば、次のドキュメントがあるとします。

The quick brown fox jumps over the lazy dog.

「lazy」を検索すると、emacsはその単語を次のように選択します(角かっこは選択、パイプはカーソルです):

The quick brown fox jumps over the [lazy|] dog.

ここで、を押すとreturn、emacsはカーソル位置を維持しますが、「lazy」の選択を解除します。

The quick brown fox jumps over the lazy| dog.

これの代わりに、上記の2番目の状態のように、検索モードを終了し、現在の一致選択を維持するショートカットが必要です。


M-x query-replaceお探しのものではありませんか?
ヌスカミ_

1
@Nsukami_検索する前に、自分のクエリをどのようにしたいのか、あるいは何に置き換えたいのかさえわからない。C-s検索したいものをヒットして入力するだけで、変更したいものにバックスペースのあるクエリをゼロに変更する方がはるかに簡単です。次に、置き換えたいものを試します。M-%「フォーマル」すぎる。
Ben

単語を検索して殺し、別の場所に移動するときのように、解決策は私にとって便利です。query-replaceこれを解決しません。
GergelyPolonkai 2017年

回答:


7

これが1つのアプローチです。

(defun isearch-exit-mark-match ()
  "Exit isearch and mark the current match."
  (interactive)
  (isearch-exit)
  (push-mark isearch-other-end)
  (activate-mark))

(define-key isearch-mode-map (kbd "<C-return>") #'isearch-exit-mark-match)

これは、別のキー(C-return)をバインドして、現在のisearchを終了し、最後に一致したものを選択したままにします。これも機能するisearch-forward-regexpので便利です。


1
「Symbolの関数定義は無効です:bind-key」と表示されます。どこbind-keyから来たの?
ベン

1
申し訳ありませんが、bind-key別のライブラリから来ています。define-key代わりに組み込み関数を使用するように答えを変更しました。
グルカ2017年

4

Library Isearch +を使用すると、簡単にそれを実行でき、さらにオンザフライでオン/オフを切り替えることもできます。

  • 非nilオプションisearchp-set-region-flagは、isearchを終了したときに、最後の検索ターゲットの周囲の領域(選択)を自動的に設定します。

  • コマンドisearchp-toggle-set-regionM-s M-SPCisearch中にバインドされたオプションを切り替えますisearchp-set-region-flag

  • コマンドset-region-around-search-targetは、最後の検索ターゲットの周囲の領域を手動で設定します。(したがって、オプションが設定されていない場合でも、自動選択を取得できないため、手動で選択できます。)


ライブラリReplace +を使用すると、同じこと実行できますquery-replace。これにより、最後の置換オカレンスの周囲にリージョンが配置されます(つまり、選択されます)。これは、isearchp-set-region-flagこれを制御するために同じオプションを使用し、コマンドset-region-around-search-targetは同じ効果があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.