2011-09-26 10 views
7

Mi piacerebbe isearch/search-replace/si verificano solo nel codice (che non è nei commenti o nelle stringhe).In Emacs come operare (cioè ricerca) solo nelle regioni di codice?

Questo deve essere un problema comune, quindi quali pacchetti lo fanno già?

Se nessun pacchetto esistente esegue questa operazione, penso che una modalità secondaria in cui le stringhe e i commenti siano nascosti in base alla fonificazione farebbe il trucco. Ce n'è uno?

+0

[Ecco una discussione correlato] (http://thread.gmane.org/gmane .emacs.devel/129755) su emacs-devel. Apparentemente il problema è che puoi nascondere quelle parti, ma la sostituzione non la terrà in considerazione e farà la sua parte anche nella parte nascosta. – Tom

+0

Anche qui: http://groups.google.com/group/gnu.emacs.help/browse_thread/thread/757fb08373f9fbf8 –

risposta

0

Sì, hai ragione. La modalità minore HideShow consente di nascondere/mostrare blocchi di testo, in particolare commenti multilinea.

I commenti hide/show non fanno parte del pacchetto standard ma nella pagina wiki troverete il codice che fa il trucco.

Quindi il comando isearch non tiene conto dei commenti nascosti.

TUTTAVIA: la sostituzione funziona sull'intero buffer, inclusi i blocchi nascosti.

+0

Provato con emacs 23.2, nascosto codice java e search-replace ha modificato il contenuto del blocco nascosto come bene, quindi non è davvero una risposta alla domanda. – Tom

+0

Sì, la sostituzione funziona sull'intero buffer. isearch, tuttavia, non esamina i blocchi nascosti –

0

Check out narrowing.

+0

Whoops, ho perso la parola "codice" da quella domanda. Bene, dal momento che restringere è così fantastico, malmente lascia la risposta qui senza vergogna. Magari potresti usare il restringimento e la tabella della sintassi con un po 'di elit fa il trucco. –

+0

Il problema con il restringimento può solo restringere il buffer a un blocco contiguo. Sarebbe molto bello se emacs supportasse più regioni per il restringimento. – Tom

2

Icicles search offre diversi modi per farlo. Qui ci sono due:

  • ricerca "cose" (ad esempio defun s, sexp s, elementi XML, ecc), ignorando i commenti (opzione icicle-ignore-comments-flag). Cioè, usa segmenti di codice selezionati come contesti di ricerca, ma ignora tutti i commenti all'interno di codice o codice all'interno dei commenti.

  • Cerca il complement dei commenti. Ad esempio, definire i contesti di ricerca come complemento delle zone di testo bloccate con font con la faccia font-lock-comment-face o con la faccia font-lock-comment-delimiter-face (che significa cercare tutto il codice all'esterno dei commenti).

Dopo aver definito i contesti di ricerca, è sufficiente digitare testo per filtrare in modo incrementale i contesti. E puoi replace qualsiasi partita su richiesta.

0

Isearch+ fa quello che chiedi (come fa Icicles --- vedi other answer, sopra).

è possibile definire il contesti che le ricerche iSearch, utilizzando uno dei seguenti:

  • Un regexp da abbinare.
  • un dato testo o proprietà sovrapposizione --- I contesti di ricerca sono le zone di testo che hanno la proprietà (ad esempio, un particolare valore `faccia' o una combinazione di valori)
  • Un dato Emacs THING (sexp, defun, lista, stringa, commento, ecc.) --- I contesti di ricerca sono le zone di testo del tipo dato THING.

Dopo aver definito i contesti di ricerca, si può anche cercare il complemento: i non -contexts.Puoi passare da una ricerca all'altra e viceversa in qualsiasi momento in Isearch utilizzando C-M-~.

Durante la ricerca, per impostazione predefinita le zone non cercate sono leggermente oscurate, per far risaltare le aree ricercabili.

Per context-ricerca con ISearch avete bisogno di queste due librerie:

+0

Oltre ai file dati qui, dove caricare tutto il materiale del ghiacciolo? Potresti vedere solo https://github.com/emacsmirror/icicles/archive/master.zip –

+0

@ AndreasRöhler: Ci sono molti modi per scaricare Icicles. Sono descritti [qui] (http://www.emacswiki.org/emacs/Icicles_-_Libraries). Puoi, ad esempio, ottenere Ghiaccioli da [MELPA] (http://melpa.milkbox.net/). (Ma per essere chiari, i file di Isearch + qui citati sono indipendenti da Icicles.) – Drew

Problemi correlati