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.
M-x query-replace
to, czego szukasz?C-s
i 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”.query-replace
nie rozwiązuje tego.Odpowiedzi:
Oto jedno podejście:
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.źródło
bind-key
pochodzi?bind-key
pochodzi z innej biblioteki. Zmieniłem odpowiedź, abydefine-key
zamiast tego użyć wbudowanej funkcji.Biblioteka Isearch + pozwala to zrobić łatwo , a nawet włączać i wyłączać w locie.
Opcja non-zero
isearchp-set-region-flag
automatycznie ustawia region (wybór) wokół ostatniego celu wyszukiwania po wyjściu z isearch.Polecenie
isearchp-toggle-set-region
powiązane zM-s M-SPC
opcją przełączania isearchisearchp-set-region-flag
.Polecenie
set-region-around-search-target
ustawia 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-replace
itd. Ustawia region wokół (tzn. Wybiera) ostatnie wystąpienie zamiany. Używa tej samej opcji,isearchp-set-region-flag
aby to kontrolować, a polecenieset-region-around-search-target
ma taki sam efekt.źródło