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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top