Wybieranie (tzn. Jako regionu) bieżącego dopasowania w wyszukiwaniu przyrostowym

9

Podczas wyszukiwania ciągu za pomocą C-s, chcę być w stanie nacisnąć jakiś klawisz, aby wyjść z trybu wyszukiwania, ale nadal zachować wybór dopasowania. W ten sposób mogę natychmiast zacząć pisać i zastąpić ostatnie dopasowanie.

Powiedzmy, że mam następujący dokument:

The quick brown fox jumps over the lazy dog.

Jeśli szukam słowa „leniwy”, emacs wybierze to słowo w ten sposób (nawiasy kwadratowe są zaznaczone, potok jest kursorem):

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

Teraz, jeśli naciśniesz return, emacs utrzyma moją pozycję kursora, ale usunie zaznaczenie „leniwy”:

The quick brown fox jumps over the lazy| dog.

Zamiast tego chcę skrót, który opuści tryb wyszukiwania, ale utrzyma bieżący wybór dopasowania, jak w drugim stanie powyżej.

Ben
źródło
Czy nie M-x query-replaceto, czego szukasz?
Nsukami _
1
@Nsukami_ Nie zawsze wiem, co chcę, aby moje zapytanie było, a nawet czym chcę je zastąpić przed rozpoczęciem wyszukiwania. O wiele łatwiej jest po prostu nacisnąć C-si wpisać, co myślę, że chcę wyszukać, a następnie zmienić zapytanie w / backspace na zero na rzecz, którą chcę zmienić. Potem bawię się tym, czym dokładnie chcę go zastąpić. M-%jest zbyt „formalny”.
Ben
Rozwiązanie jest dla mnie przydatne, na przykład kiedy szukam słowa, aby je zabić, a następnie pociągam w inne miejsce. query-replacenie rozwiązuje tego.
GergelyPolonkai

Odpowiedzi:

7

Oto jedno podejście:

(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)

Wiąże to inny klucz (C-return), aby wyjść z bieżącego isearch i pozostawić zaznaczone ostatnie dopasowanie. To również zadziała isearch-forward-regexp, co jest przydatne.

glucas
źródło
1
Pojawia się komunikat „Definicja funkcji symbolu jest nieważna: klucz powiązania”. Skąd bind-keypochodzi?
Ben
1
Przepraszamy, bind-keypochodzi z innej biblioteki. Zmieniłem odpowiedź, aby define-keyzamiast tego użyć wbudowanej funkcji.
glucas,
4

Biblioteka Isearch + pozwala to zrobić łatwo , a nawet włączać i wyłączać w locie.

  • Opcja non-zero isearchp-set-region-flagautomatycznie ustawia region (wybór) wokół ostatniego celu wyszukiwania po wyjściu z isearch.

  • Polecenie isearchp-toggle-set-regionpowiązane z M-s M-SPCopcją przełączania isearch isearchp-set-region-flag.

  • Polecenie set-region-around-search-targetustawia region wokół ostatniego celu wyszukiwania. (Więc nawet jeśli opcja nie jest ustawiona, więc nie otrzymujesz automatycznego wyboru, możesz to zrobić ręcznie).


Library Replace + pozwala zrobić to samo dla query-replaceitd. Ustawia region wokół (tzn. Wybiera) ostatnie wystąpienie zamiany. Używa tej samej opcji, isearchp-set-region-flagaby to kontrolować, a polecenie set-region-around-search-targetma taki sam efekt.

Rysował
źródło