2012-10-10 8 views
8

Vorrei cercare espressioni regolari all'interno di un buffer c/C++, ma voglio evitare l'espressione corrispondente ad un'area di commento. C'è un modo di usare la modalità c per sapere se un gruppo di testo si trova all'interno di un'area di commento (o un punto si trova all'interno di un'area di commento)?emacs lisp e c-mode: quando sono in una regione di commento

risposta

10

Il modo per capirlo è con syntax-ppss che funziona in C/C++ e maggior parte delle modalità principali. Per esempio. (null (nth 8 (syntax-ppss))) non sarà nulla se e solo se non si è all'interno di una stringa o commento.

0
(defun re-search-forward-not-in-comment (regexp) 
    "Search forward first regexp not inside a comment. " 
    (interactive 
    (list (read-from-minibuffer "Regexp: "))) 
    (while (and (re-search-forward regexp nil t 1) 
      (and (nth 8 (syntax-ppss))(nth 4 (syntax-ppss)))))) 
+3

Si prega di fornire più di un semplice collegamento. – skolima

+4

Puoi correggere la tua risposta incollando il codice qui. In questo modo la risposta sarà ancora utile dopo che il collegamento è marcito. –

+0

Se ti piace, perché non copiarlo, è gratis. –