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

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
    

¡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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.