crear un resaltado simple de sintaxis vim

25

Tengo un tipo simple de archivo de base de datos que consta solo de entradas en el siguiente formato

variable = valor

Quiero crear un simple resaltado de sintaxis vim para él y configurarlo para una extensión de archivo específica

por ejemplo, la parte variable podría ser azul claro y el valor parte rojo claro

busqué en Google y me encontré con cosas tales como $vimruntime\syntax\, syntax set=, syntax match, y hipalabras clave, pero no podía configurarlo mismo tiempo

así que quiero un fragmento de código vim muy simple que se dé cuenta haciendo coincidir los lados izquierdo y derecho y coloreándolos por separado


fuente

Respuestas:

31

Asumiendo que la extensión de su archivo es *.foo...

  1. Cree estos archivos y directorios si no existen:

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
  2. Ponga lo siguiente en $HOME/.vim/ftdetect/foo.vim:

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
  3. Ponga lo siguiente en $HOME/.vim/syntax/foo.vim:

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
  4. Coloque las siguientes líneas al final de $HOME/.vimrc(o al menos después de cualquier colorschemelínea):

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
  5. Asegúrese de tener la siguiente línea en algún lugar de su ~/.vimrc:

    syntax on
    
romainl
fuente
¡Guau, el OP obtuvo dos soluciones casi idénticas por el precio de una! Me gusta cómo nuestras dos soluciones son muy similares, pero distintas en detalles.
Ingo Karkat
Funciona, pero de nuevo tengo que escribir manualmente ftype=cada vez que, en vim, no hubo fdetectdirectorio $vimrnutime(estoy en ventanas, %programfiles(x86)%\vim\vim74\ ), lo creé, pero aún no reacciona
Necesitas syntax onen tu vimrc.
romainl
20

Script de sintaxis

Cree un archivo ~/.vim/syntax/simple.vimcon los siguientes contenidos:

" Quit when a syntax file was already loaded.
if exists('b:current_syntax') | finish|  endif

syntax match simpleVar "\k\+" nextgroup=simpleAssignment
syntax match simpleAssignment "=" contained nextgroup=simpleValue
syntax match simpleValue ".*" contained

hi def link simpleVar Identifier
hi def link simpleAssignment Statement
hi def link simpleValue String

let b:current_syntax = 'simple'

Eso coincide con los tres elementos de sintaxis y proporciona colores predeterminados. Generalmente, uno no define colores explícitos, sino que se vincula a grupos de resaltado predeterminados definidos por su esquema de colores. Puede enumerar todo a través de :hi. Para ajustar, leer :help :syntaxy :help usr_44.txtechar un vistazo a los scripts de sintaxis que se envían con Vim.

Detección de tipo de archivo

Hasta ahora, tienes que activarlo manualmente :set syntax=simple. Para hacer esto automáticamente, debe enseñarle a Vim sobre su nuevo tipo de archivo .

Crear un archivo ~/.vim/ftdetect/simple.vimcon los siguientes contenidos:

autocmd BufNewFile,BufRead *.simple setf simple

Esto supone que los archivos se pueden identificar a través del nombre del archivo (cp. :help autocmd-patterns). También puede detectar según la ruta (ubicación del archivo), o incluso el contenido. :help new-filetypeTiene detalles.

Ingo Karkat
fuente