Tuttavia, dopo aver aggiunto queste righe in .vimrc, non ha funzionato.
Il motivo è che Vim cancella gli elementi di sintassi esistenti quando si imposta l' 'syntax'
opzione. Questo perché mantenere gli elementi della vecchia sintassi porterebbe a situazioni strane; se hai un buffer che ha syntax=foo
e usa set syntax=bar
, finirai con un buffer che ha l'evidenziazione della sintassi per entrambi foo
e bar
.
All'avvio di Vim carica vimrc
una volta (all'avvio), ma carica i file del tipo di file e della sintassi ogni volta che vengono impostate le opzioni filetype
o syntax
, che ripristinerà i valori impostati in vimrc.
Anche se non lo ripristinasse, non sarebbe una buona idea aggiungerlo a Vimrc, poiché si applicherebbe a tutti i buffer e non solo ai buffer syntax=c
.
Il testo seguente presuppone Vim su un sistema Unix-y, ma funzionerà anche per gli utenti Neovim e Windows:
- Gli utenti Neovim dovrebbero sostituire
~/.vim/
con ~/.config/nvim/
.
- Gli utenti Windows devono sostituire
~/.vim/
con %USERPROFILE%\vimfiles\
.
Sostituzione di un intero file
Il modo più semplice per cambiare qualcosa è semplicemente ignorarlo . Per fare ciò, crea un file in ~/.vim/<file>.vim
.
<file.vim>
è il percorso relativo a $VIMRUNTIME
(comprese le sottodirectory). Nel tuo esempio, dovrebbe essere syntax/c.vim
. Verrà caricato al posto del file $VIMRUNTIME
.
Il risultato è che è più semplice apportare modifiche: a volte modificare i file di sintassi in uscita può essere un po 'complicato. Il rovescio della medaglia è che non otterrai aggiornamenti futuri nel file di sistema.
Lo uso spesso come punto di partenza per sperimentare i file di sintassi e successivamente estrarre le modifiche locali in un'aggiunta locale utilizzando uno dei metodi descritti di seguito.
Aggiunte locali
Esistono due modi per aggiungere aggiunte locali ai file di sintassi, sono funzionalmente identici e puoi usare il metodo che preferisci.
Syntax
autocmd
Usa Syntax
autocmd:
augroup ft_c
autocmd!
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
autocmd Syntax c hi cFunction gui=NONE guifg=#B5A1FF
augroup end
Si noti che concatenare diversi comandi |
è problematico qui, poiché tendono ad essere interpretati come parte del :syn
comando, motivo per cui ho ripetuto autocmd Syntax c
più volte. Un'alternativa sarebbe usare una funzione:
fun s:c()
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
endfun
augroup ft_c
autocmd!
autocmd Syntax c call s:c()
augroup end
Il vantaggio è che tutte le modifiche possono essere contenute in un singolo file. Lo svantaggio è che è un po 'brutto, soprattutto se hai molti cambiamenti.
dopo la directory
Utilizzare la directory dopo-: ~/.vim/after/<file>.vim
.
Questo verrà caricato dopo <file>.vim
has, dove si <file.vim>
trova il percorso relativo $VIMRUNTIME
(comprese le sottodirectory). Nel tuo esempio, dovrebbe essere syntax/c.vim
.
Vedere anche :help after-directory
.
Il vantaggio è che è un po 'più leggibile rispetto a autocmd, soprattutto se si hanno molte modifiche. Lo svantaggio è che dovrai copiare su un file aggiuntivo se vuoi rispecchiare la tua configurazione di Vim su macchine diverse (questo è un motivo importante per cui molte persone conservano i loro file Vim in un repository GitHub, quindi può essere facilmente replicato su tutte le macchine ).
~/.vim/after/syntax/c.vim
invece ad aggiungerlo a .