Sin embargo, después de agregar estas líneas al .vimrc, no funcionó.
La razón de esto es que Vim borra los elementos de sintaxis existentes al configurar la 'syntax'
opción. Esto se hace porque mantener los elementos de sintaxis antiguos conduciría a situaciones extrañas; si tiene un búfer que tiene syntax=foo
y usa set syntax=bar
, terminará con un búfer que tiene resaltado de sintaxis para ambos foo
y bar
.
Cuando Vim se inicia, carga una vimrc
vez (en el inicio), pero carga los archivos de tipo de archivo y sintaxis cada vez que se configuran las opciones filetype
o syntax
, lo que restablecerá los valores que ha establecido en su vimrc.
Incluso si no lo restableciera, no sería una buena idea agregarlo a su vimrc, ya que se aplicaría a todos los buffers, y no solo a los buffers con syntax=c
.
El texto a continuación asume Vim en un sistema Unix-y, pero también funcionará para los usuarios de Neovim y Windows:
- Los usuarios de Neovim deben reemplazar
~/.vim/
con ~/.config/nvim/
.
- Los usuarios de Windows deben reemplazar
~/.vim/
con %USERPROFILE%\vimfiles\
.
Anular un archivo completo
La forma más fácil de cambiar algo es simplemente anularlo . Para hacerlo, cree un archivo en ~/.vim/<file>.vim
.
<file.vim>
es la ruta relativa a $VIMRUNTIME
(incluidos los subdirectorios). En su ejemplo, debería ser syntax/c.vim
. Se cargará en lugar del archivo en $VIMRUNTIME
.
El resultado de esto es que es más fácil hacer cambios: enmendar los archivos de sintaxis existentes puede ser un poco complicado a veces. La desventaja es que no recibirá actualizaciones futuras en el archivo de todo el sistema.
A menudo uso esto como punto de partida para experimentar con archivos de sintaxis, y luego extraigo mis cambios locales a una adición local usando uno de los métodos que se describen a continuación.
Adiciones locales
Hay dos formas de agregar adiciones locales a los archivos de sintaxis, son funcionalmente idénticas y puede usar el método que prefiera.
Syntax
autocmd
Use el 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
Tenga en cuenta que encadenar varios comandos |
es problemático aquí, ya que tienden a interpretarse como parte del :syn
comando, por lo que he repetido autocmd Syntax c
varias veces. Una alternativa sería usar una función:
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
La ventaja es que todos los cambios pueden estar contenidos en un solo archivo. La desventaja es que es un poco feo, especialmente si tiene muchos cambios.
después del directorio
Utilice el directorio de post-: ~/.vim/after/<file>.vim
.
Esto se cargará después de <file>.vim
has, donde <file.vim>
es la ruta relativa a $VIMRUNTIME
(incluidos los subdirectorios). En su ejemplo, debería ser syntax/c.vim
.
También vea :help after-directory
.
La ventaja es que es un poco más legible que el autocmd, especialmente si tiene muchos cambios. La desventaja es que necesitará copiar un archivo adicional si desea duplicar su configuración de Vim en diferentes máquinas (esta es una razón importante por la que muchas personas mantienen sus archivos Vim en un repositorio de GitHub, por lo que puede reflejarse fácilmente en las máquinas )
~/.vim/after/syntax/c.vim
lugar.