Ricerca del testo contrassegnato (selezionato) in Emacs
-
03-07-2019 - |
Domanda
Uso emacs per visualizzare e modificare codice e altri file di testo. Volevo sapere se esiste un modo per cercare avanti o indietro il testo che è contrassegnato nel buffer corrente. Simile a quello che posso fare in Blocco note o Wordpad. Come in posso segnare un po 'di testo nel buffer e fare un C-s o C-r ed essere in grado di cercare con il testo contrassegnato senza effettivamente digitare l'intero testo di ricerca?
Grazie
Rohit
Soluzione
Sì. M-W
(per ottenere una copia del testo selezionato) C-s <RET> C-y <RET>
. Quindi ripetere C-s
secondo necessità. Allo stesso modo per C-r
.
Altri suggerimenti
@Alex lo inchioda.
Un'altra opzione che uso abbastanza spesso è C-s C-w
per cercare la parola dopo il segno corrente. Colpire ripetutamente C-w
aumenta la ricerca con parole aggiuntive (ad es. C-s C-w C-w C-w
cerca le 3 parole dopo il segno corrente).
Allo stesso modo, C-s M-s C-e
cerca il resto della riga dopo il segno corrente e C-s C-M-y
cerca il carattere dopo il segno. Entrambi sono ripetibili allo stesso modo (il primo ripetendo in qualche modo goffamente M-s C-e
dopo C-s
).
Sto usando quanto segue che non ha il problema di dover digitare più di un C-s successivo per trovare ricorrenze successive:
(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)
Lo svantaggio del codice precedente è che il testo selezionato viene copiato nell'estensione. Il seguente codice non presenta questo problema:
(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)
Altre risposte descrivono come cercare il testo copiato o come cercare la parola nel punto. Ma nessuno di loro in realtà descrive come & Quot; cercare con il testo contrassegnato. & Quot;
L'aggiunta del seguente hook lo farà in modo che il testo attualmente selezionato sia il testo utilizzato per un'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)
Suggerimento: si abbina perfettamente a expand-region .
La sequenza di tasti più breve per farlo è M - w C - s M -. y
C'è un'ottima funzione per questo: isearch-forward-symbol-at-point
. Evidenzia tutte le occorrenze della parola in cui si trova il punto - non è necessario posizionare il punto all'inizio della parola. Quindi puoi passare al successivo o al precedente con C-s o C-r.
Nota che è una corrispondenza esatta: se la usi su hi
non corrisponderà ad chill
per esempio.
Ho mappato se su command-f
(mac OSX): (global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point)
nel file init.
Le risposte sopra (compresa quella accettata) sono IMHO troppo ingombranti. Ho trovato le seguenti informazioni e mi piace molto meglio:
& # 8220; Ctrl + s Ctrl + w & # 8221 ;. Questo cercherà la parola corrente, ma è necessario spostarsi prima il cursore all'inizio della parola.
http: // xah- forum.blogspot.com/2009/08/search-word-under-cursor-in-emacs.html
Puoi trovare l'aiuto di C-s facendo C-h k C-s, e dice:
Digitare DEL per annullare l'ultimo elemento di input dalla fine della stringa di ricerca. Digitare RET per uscire, lasciando il punto nella posizione trovata. Digitare LFD (C-j) per abbinare fine di linea. Digita C-s per cercare di nuovo in avanti, C-r per cercare di nuovo all'indietro. Digita C-w per trascinare la parola o il carattere successivo nel buffer su fine della stringa di ricerca e cercarla. Digitare C-M-w per eliminare carattere dalla fine della stringa di ricerca. Digitare C-M-y per estrarre il carattere da buffer alla fine della stringa di ricerca e cercarla. Digitare M-s da C-e a trascina il resto della linea alla fine della stringa di ricerca e cercala. genere C-y per strappare l'ultima stringa di testo ucciso. Digitare M-y per sostituire la stringa appena tirato nel prompt di ricerca con la stringa uccisa prima di esso. Digitare C-q per citare il personaggio di controllo per cercarlo. Digitare C-x 8 RET per aggiungere a carattere da cercare per nome Unicode, con completamento. C-g mentre la ricerca o quando la ricerca non è riuscita annulla l'input a ciò che ha stato trovato con successo. C-g quando la ricerca ha esito positivo si interrompe e sposta il punto al punto iniziale.
Se si tenta di uscire con la stringa di ricerca ancora vuota, viene richiamato ricerca non incrementale.
Digita M-c per attivare la distinzione tra maiuscole e minuscole. Digitare M-s i per attivare / disattivare cerca in testo invisibile. Digitare M-r per attivare / disattivare la modalità di espressione regolare. Digita M-s w per attivare / disattivare la modalità parola. Digita M-s _ per attivare / disattivare la modalità simbolo. genere M-s 'per attivare / disattivare la piegatura del personaggio.
Digita M-s SPC per attivare la corrispondenza degli spazi bianchi. Nelle ricerche incrementali, a lo spazio o gli spazi normalmente corrispondono a qualsiasi spazio bianco definito da variabile & # 8216; search-whitespace-regexp & # 8217 ;; vedi anche le variabili & # 8216; isearch-LAX-spazio bianco # 8217 &; e & # 8216; isearch-regexp-lax-whitespace & # 8217 ;.
Digita M-s e per modificare la stringa di ricerca nel minibuffer.
È supportato anche un anello di ricerca delle precedenti 16 stringhe di ricerca. Digitare M-n per cercare l'elemento successivo nell'anello di ricerca. Digitare M-p a cerca l'elemento precedente nell'anello di ricerca. Digitare da C-M-i a completa la stringa di ricerca usando l'anello di ricerca.
Digita M-% per eseguire & # 8216; query-sostituisci & # 8217; con stringa da sostituire dall'ultimo stringa di ricerca. Digitare C-M-% per eseguire & # 8216; query-replace-regexp & # 8217; con l'ultimo stringa di ricerca. Digitare M-s o per eseguire & # 8216; si verificano & # 8217; che mostra l'ultima ricerca stringa. Digita M-s h r per eseguire & # 8216; highlight-regexp & # 8217; che evidenzia il ultima stringa di ricerca.
Digitare C-h b per visualizzare tutti i collegamenti dei tasti Isearch. Digitare C-h k per visualizzare documentazione della chiave Isearch. Digitare C-h m per visualizzare la documentazione di Modalità Isearch.