Выбор (т. Е. В качестве региона) текущего соответствия в инкрементном поиске

9

При поиске строки с помощью C-sя хочу иметь возможность нажать какую-то клавишу, чтобы выйти из режима поиска, но при этом сохранить выбор совпадения. Таким образом, я могу сразу же начать печатать и заменить последнее совпадение.

Например, скажем, у меня есть следующий документ:

The quick brown fox jumps over the lazy dog.

Если я найду "ленивый", emacs выберет это слово примерно так (квадратные скобки - это выделение, труба - курсор):

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

Теперь, если я returnнажму, emacs сохранит мою позицию курсора, но отменит выбор «lazy»:

The quick brown fox jumps over the lazy| dog.

Вместо этого я хочу ярлык, который выйдет из режима поиска, но сохранит текущий выбор совпадения, как во втором состоянии выше.

Бен
источник
Разве не M-x query-replaceто, что вы ищете?
Nsukami _
1
@Nsukami_, прежде чем искать, я не всегда знаю, каким должен быть мой запрос или даже чем его заменить. Гораздо проще просто нажать C-sи набрать то, что, я думаю, я хочу найти, а затем изменить запрос с обратным пространством на ноль для того, что я хочу изменить. Затем я играю с тем, что именно хочу заменить. M-%слишком "формально".
Бен
Решение мне пригодится, например, когда я ищу слово, чтобы убить его, а затем возвращаю его в другое место. query-replaceне решает это.
GergelyPolonkai

Ответы:

7

Вот один из подходов:

(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-forward-regexp, что удобно.

glucas
источник
1
Я получаю "Определение функции Symbol void: bind-key." Откуда bind-keyидет?
Бен
1
Извините, bind-keyприходит из другой библиотеки. Я изменил ответ, чтобы использовать встроенную define-keyфункцию вместо этого.
glucas
4

Библиотека Isearch + позволяет вам легко это делать и даже включать / выключать ее на лету.

  • Параметр, отличный от нуля, isearchp-set-region-flagавтоматически устанавливает область (выделение) вокруг последней цели поиска при выходе из поиска.

  • Команда isearchp-toggle-set-region, связанная с M-s M-SPCпараметром переключателя isearch isearchp-set-region-flag.

  • Команда set-region-around-search-targetвручную устанавливает область вокруг последней цели поиска. (Таким образом, даже если этот параметр не установлен, поэтому вы не получаете автоматический выбор, вы можете сделать это вручную.)


Библиотека Replace + позволяет вам делать то же самое для query-replaceи т. Д. Она помещает область вокруг (то есть выбирает) последнее вхождение замены. Он использует ту же опцию, isearchp-set-region-flagдля управления этим, и команда set-region-around-search-targetимеет тот же эффект.

Нарисовалась
источник