2008-10-14 12 views
37

Używam emacs do przeglądania i edycji kodu i innych plików tekstowych. Chciałem wiedzieć, czy istnieje sposób wyszukiwania w przód lub w tył dla tekstu, który jest zaznaczony w bieżącym buforze. Podobny do tego, co mogę zrobić w notatniku lub notatniku. Jak mogę zaznaczyć jakiś tekst w buforze i wykonać C-y lub C-r i być w stanie wyszukiwać zaznaczonym tekstem bez wpisywania całego tekstu wyszukiwania?Wyszukiwanie zaznaczonego tekstu w Emacs

Dziękuję

Rohit

Odpowiedz

30

Tak. M-W (aby uzyskać kopię zaznaczonego tekstu) C-s <RET> C-y <RET>. Następnie w razie potrzeby powtórz C-s. Podobnie dla C-r.

+0

Cieszę się, że mogę pomóc. Nawiasem mówiąc, odpowiednią sekcją podręcznika jest "20.1 Podstawy wyszukiwania przyrostowego". Ch idm emacs g Basic Isearch http://www.manpagez.com/info/emacs/emacs_95.php –

+0

Tak już zrobiłem ... Jestem nieco zaskoczony, że nie ma jednego wbudowanego polecenia dla tego. – fbmd

+8

To nie wyjaśnia, jak wyszukiwać zaznaczony tekst. To wyjaśnia, jak szukać skopiowanego tekstu. – Jackson

81

@Alex paznokcie to.

Inną opcją, której często używam, jest C-s C-w, aby wyszukać słowo po bieżącym znaku. Uderzanie C-w wielokrotnie zwiększa wyszukiwanie o dodatkowe słowa (np. C-s C-w C-w C-w wyszukuje 3 słowa po bieżącym znaku).

Podobnie, C-s C-y wyszukuje resztę linii po bieżącym znaku, a C-s C-M-y wyszukuje znak po znaku. Oba są powtarzalne w ten sam sposób.

+1

Poręczna wskazówka. – Rohit

+0

Podobnie, 'C-r C-w' wyszukuje do tyłu (" r "= wstecz) dla słowa po znaku. A 'C-r C-w C-w' wyszukuje w tył dla dwóch słów po znaku. – dougkramer

+2

To powinna być zaakceptowana odpowiedź. –

6

Najkrótsza sekwencja klawiszy na to jest M - wC - sM - Y.

+0

Warto zauważyć, że to wyszukiwanie małych liter słowa, nawet jeśli podświetlasz wszystkie wielkie litery. – maxywb

+0

To jest naciśnięcie klawisza, a nie polecenie, co oznacza, że ​​nie ma znaczenia w żadnym środowisku, które go zastępuje. Wysyła nas w dzikie gonitwy, aby dowiedzieć się, do jakiego polecenia chcesz się odwoływać. –

12

Używam następujących składników, które nie mają problemu konieczności wpisywania więcej niż jedną kolejną Cs znaleźć późniejszych wystąpień:

(defun search-selection (beg end) 
     "search for selected text" 
     (interactive "r") 
     (kill-ring-save beg end) 
     (isearch-mode t nil nil nil) 
     (isearch-yank-pop) 
    ) 
    (define-key global-map (kbd "<C-f3>") 'search-selection) 

Wadą poprzedniego kodu jest, że wybrany tekst jest kopiowany do odcinek. Poniższy kod nie ma tego problemu:

(defun search-selection (beg end) 
     "search for selected text" 
     (interactive "r") 
     (let (
      (selection (buffer-substring-no-properties beg end)) 
      ) 
     (deactivate-mark) 
     (isearch-mode t nil nil nil) 
     (isearch-yank-string selection) 
    ) 
    ) 
    (define-key global-map (kbd "<C-f3>") 'search-selection) 
3

Inne odpowiedzi opisują jak wyszukać skopiowanego tekstu, lub jak wyszukiwać słowa w punkcie. Ale żaden z nich nie opisuje, jak "wyszukiwać zaznaczonym tekstem".

Dodanie następującego hak zrobi to tak, że aktualnie wybrany tekst jest tekst używany przez iSearch:

(defun jrh-isearch-with-region() 
    "Use region as the isearch text." 
    (when mark-active 
    (let ((region (funcall region-extract-function nil))) 
     (deactivate-mark) 
     (isearch-push-state) 
     (isearch-yank-string region)))) 

(add-hook 'isearch-mode-hook #'jrh-isearch-with-region) 

Wskazówka: To ładnie z expand-region par.

3

Jest w tym świetna funkcja: isearch-forward-symbol-at-point.Podkreśla wszystkie wystąpienia słowa, w którym znajduje się punkt - bez potrzeby umieszczania punktu na początku słowa. Następnie możesz przejść do następnego lub poprzedniego za pomocą C-s lub C-r.

Pamiętaj, że jest to dopasowanie ścisłe: jeśli użyjesz go na hi, na przykład nie będzie pasował do chill.

Zmapowałem, jeśli na command-f (mac OSX): (global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point) w pliku init.

+0

To (prawie) dokładnie to, o co pyta. Jedyna różnica polega na tym, że 'isearch-forward-symbol-at-point' automatycznie wybiera tekst w punkcie. Może to być problematyczne, jeśli to, co uważasz za słowo, różni się od tego, co Emacs uważa za słowo. Wciąż przydatny. Domyślnym opcją dla GNU Emacs 24.5.1 jest 'M-s .'. –

Powiązane problemy