Вибір (тобто, як регіон) поточного збігу в поступовому пошуку


9

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

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

The quick brown fox jumps over the lazy dog.

Якщо я шукаю "ледачий", emacs вибере це слово так (квадратні дужки - це виділення, труба - курсор):

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

Тепер, якщо я натискаю return, Emacs збереже моє положення курсору, але він скасує позначку "ледачий":

The quick brown fox jumps over the lazy| dog.

Замість цього я хочу ярлик, який вийде з режиму пошуку, але збереже поточний вибір відповідності, як у другому стані вище.


Це не M-x query-replaceте, що ви шукаєте?
Nsukami _

1
@Nsukami_ Я не завжди знаю, яким я хочу бути мій запит або навіть на що я хочу його замінити, перш ніж шукати. Набагато простіше просто натиснути C-sі набрати те, що, на мою думку, хочу шукати, а потім змінити запит w / backspace на нуль у тому, що я хочу змінити. Потім я розігруюсь з тим, що саме я хочу замінити. 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) для виходу з поточного пошуку, а також залишає вибране останнє збіг. Це буде працювати і з тим isearch-forward-regexp, що зручно.


1
Я отримую "Визначення функції Symbol є недійсним: bind-key." Звідки bind-keyбереться?
Бен

1
Вибачте, bind-keyпоходить з іншої бібліотеки. Я змінив відповідь, щоб використовувати define-keyзамість неї вбудовану функцію.
глюкас

4

Бібліотечний Isearch + дозволяє вам це робити легко і навіть вмикати / вимикати його на льоту.

  • Параметр "non-nil" isearchp-set-region-flagавтоматично встановлює регіон (вибір) навколо останньої цілі пошуку, коли ви закриєте пошук.

  • Команда isearchp-toggle-set-region, прив’язана до M-s M-SPCопції перемикання пошуку isearchp-set-region-flag.

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


Бібліотечна заміна + дозволяє робити те ж саме для query-replaceтощо. Це ставить область навколо (тобто вибирає) останнє заміна заміни. Він використовує той самий варіант, isearchp-set-region-flagщоб керувати цим, а команда set-region-around-search-targetмає той же ефект.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.