Domanda

In VIM, devo eseguire un semplice compito: evidenziare " (" e ") " ;. Posso farlo facilmente emettendo due comandi:

:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000

Ma se aggiungo gli stessi comandi (senza ':' ovviamente) per svuotare .vimrc e riavviare VIM - " (" e ") " non sono più evidenziati nei file .cpp. Sembra che se creo / carico file .cpp, VIM carica il file di sintassi per esso che sovrascrive i miei momenti salienti personalizzati. Come posso configurare i momenti salienti nel mio file .vimrc in modo che avvenga dopo le definizioni di sintassi standard o non sia influenzato dalla definizione di sintassi standard?

È stato utile?

Soluzione

Esistono quattro opzioni (due delle quali sono state suggerite da altri):

  1. Usa la struttura after in vimfiles (~ / .vim / after / syntax / cpp.vim):

    :help after-directory
    
  2. Usa la corrispondenza per la finestra corrente:

    :match really_unique_name "[()]"
    
  3. Usa matchadd (), di nuovo per la finestra corrente, ma ciò ti consente di eliminare singole corrispondenze se in seguito devi:

    :call matchadd('really_unique_name', "[()]")
    " Or
    :let MyMatchID = matchadd('really_unique_name', "[()]")
    " and then if you want to switch it off
    :call matchdelete(MyMatchID)
    
  4. Installa il plug-in rainbow.vim del Dr Chip per ottenere l'evidenziazione del controvento in diversi colori a seconda del livello di rientro.

Per questa situazione, raccomanderei l'opzione 1 in quanto sembra che tu voglia renderlo parte della sintassi generale. Se si desidera utilizzare le corrispondenze e si desidera che siano specifiche del buffer (anziché specifiche della finestra), è necessario qualcosa del tipo:

function! CreateBracketMatcher()
    call clearmatches()
    call matchadd('really_unique_name', "[()]")
endfunc
au BufEnter <buffer> call CreateBracketMatcher()

Per ulteriori informazioni, consultare:

:help after-directory
:help :match
:help matchadd()
:help matchdelete()
:help clearmatches()
:help function!
:help autocmd
:help autocmd-buffer-local
:help BufEnter

Potresti anche essere interessato alla mia risposta a questa domanda , che copre l'evidenziazione più generale dell'operatore.

Altri suggerimenti

Metti le impostazioni in ~ / .vim / after / syntax / cpp.vim

Invece di usare syn match, usa solo match. ad esempio:

hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"

match ha una precedenza maggiore rispetto a syn-match (ovvero: la sua evidenziazione sovrascriverà l'evidenziazione generata da syn-match) e i file di sintassi (ben educati) non dovrebbero confonderlo.

L'unica avvertenza con match è che è per finestra, piuttosto che per buffer.

Se hai bisogno di ulteriori match puoi usare 2match e 3match.

Vedi : help: match in Vim per maggiori informazioni.

Di solito lo faccio in questo modo:

:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"

au sta per autocmd . L'aiuto dirà di più.

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