2010-11-04 3 views
32

In vim, FIXME e TODO sono evidenziati, ma non riesco a ottenere FIXME: e TODO: (notare i due punti dopo la parola chiave) per evidenziare? Cosa dovrei inserire nel mio .vimrc per farlo accadere?In vim, come posso evidenziare TODO: e FIXME :?

+1

Questo è strano; evidenziare la mia con o senza i due punti. L'evidenziazione della sintassi è definita in singole sintassi, penso - sta succedendo in qualche specifico tipo di file? – Cascabel

+0

@Jefromi: Penso che accada in ogni tipo di file. –

+2

cosa significa ': set dettagliato iskeyword?' Tell? – Benoit

risposta

46

Bene, hai già trovato il problema, ma ecco il perché.

Esistono tre tipi fondamentali di corrispondenza della sintassi: parole chiave, corrispondenze e regioni. Le parole chiave sono stringhe fisse, generalmente utilizzate per le parole chiave della lingua di base (int, double, ...) e anche, nel tuo caso, per FIXME e TODO. In realtà intendo stringhe fisse; devono essere parole esatte e intere, a differenza delle partite e delle regioni, che usano regex. Ad esempio, dalla sintassi C:

syn keyword cTodo contained TODO FIXME XXX 

Sembra che in quasi tutti incorporati nelle definizioni di sintassi, solo con i nomi dei gruppi diversi (cTodo).

iskeyword indica se un determinato carattere può far parte della parola chiave. Per impostazione predefinita, non include i due punti, quindi quando cerchi le parole chiave, vim vede "FIXME:" come "FIXME" e ignora i due punti. Se dovete aggiungere i due punti (set iskeyword+=:), è ora possibile definire un po 'più di evidenziare:

syn keyword myTodo contained TODO: FIXME: 

E' a voi come si desidera lavorare in gruppi di sintassi/evidenziazione esistenti. Se è per un solo tipo di file, è possibile aggiungerlo al gruppo di elementi di quella sintassi (ad esempio cTodo). Se lo vuoi ovunque, puoi fare "myTodo" come suggerito, quindi collegarlo direttamente al gruppo di evidenziazione di Todo (hi def link myTodo Todo).

In alternativa, è possibile lasciare iskeyword sola (probabilmente sarei consiglio questo), e semplicemente utilizzare un match:

syn match myTodo contained "\<\(TODO\|FIXME\):" 
hi def link myTodo Todo 
+0

+1 @Jefromi, tuttavia, non penso che questa corrispondenza syn funzioni. L'ho schiaffeggiato nel mio .vimrc e se cambio FIXME in qualcos'altro non è evidenziato. – g33kz0r

+2

@ G33kx0r: Non è colpa di questa partita; funziona se esiste ancora. Sospetto che tu stia abilitando la sintassi (in un modo o nell'altro) * dopo * le righe nell'esecuzione di vimrc e quando la sintassi è abilitata, prima cancella la sintassi vecchia e carica quella appropriata. Puoi verificare se quella corrispondenza è ancora attiva usando ': syn list myTodo'. Vedi anche ': help syntax-loading'. – Cascabel

+0

Impostando prima 'syntax on' e successivamente' syn match myTodo conteneva "\ <\ (TODO \ | FIXME \):" 'nel mio file' vimrc' e 'hi! def link myTodo Todo' non funziona per me. D'altra parte, se lo faccio, ad esempio, au bufNewFile, BufRead * .tex syn match texTodo "\ <\ (TODO \ | FIXME \):" "il file' tex' risultante è correttamente evidenziato. C'è una soluzione generale? – petobens

1

Se si effettua il proprio ambiente, make syntax file (not .vimrc)

  • sintassi globale il file si trova nella directory vim (ad esempio /usr/share/vim/vim72/syntax/c.vim)

  • e se si fai ~/.vim/syntax/c.vim, quindi puoi aggiungere la sintassi per il tuo . (override)

Basta aggiungere ulteriore sintassi in quel file. (Il modo in cui lo fa @Jefromi)

8
augroup vimrc_todo 
    au! 
    au Syntax * syn match MyTodo /\v<(FIXME|NOTE|TODO|OPTIMIZE|XXX):/ 
      \ containedin=.*Comment,vimCommentTitle 
augroup END 
hi def link MyTodo Todo 

Il containedin lo aggiungeremo a tutti i gruppi che terminano in "Commento", più vimCommentTitle, dove " TODO: foo non si sarebbe messo in evidenza come MyTodo altrimenti.

+0

Note di utilizzo: puoi aggiungerlo al tuo .vimrc e rimuovere i due punti (':') se vuoi solo che la parola sia evidenziata, e non i due punti che la seguono. Preferisco l'evidenziazione per leggere _NOTE_ :, non _NOTA: _. A volte scrivo anche NOTE o TODO non seguito da due punti. – Ari