resaltar - VIM: pasos simples para crear un archivo de resaltado de sintaxis-para archivos de registro
vim resaltar sintaxis (4)
Tengo algunos (log4j generados) archivos de registro para pasar; Conozco su formato bastante bien (me refiero a que ya tengo regexes off-the-peg, etc. que puedo usar).
Quiero resaltarlos automáticamente en VIM cuando los cargue (* .log).
Una entrada de archivo de registro se parece a esto:
YYYY-MM-DD HH:MM:ss,SSS [...] #LOG-LEVEL# [...] Message
Donde # LOG-LEVEL # es uno de los estándares ''ERROR'', ''INFO'', ''DEBUG'', ''FATAL'' ... y el ''YYYY-MM ...'' representa la fecha / hora a la resolución de milisegundos.
Para comenzar, ¿cuáles son los pasos necesarios para resaltar la cadena de fecha en (digamos) el fondo amarillo con texto azul? Y también cuando el texto dice "ERROR", este debe tener un fondo rojo con texto blanco.
He intentado seguir algunos tutoriales sobre esto, pero no puedo encontrar uno que sea lo suficientemente simple de entender, ¡así que estoy siguiendo algunos pasos básicos reales aquí!
Aclamaciones
EDITAR: Aquí está el resumen de lo que hice, basado en las instrucciones a continuación:
Creé el archivo de sintaxis ''log.vim'' en .vim / syntax (vea a continuación el contenido de ejemplo).
Creó un archivo en .vim / ftdetect / log.vim con el siguiente contenido:
au BufRead, BufNewFile * .log set filetype = log
Me aseguré de que lo siguiente esté en mi configuración de inicio:
sintaxis en el tipo de archivo en
Hay tres formas de definir los elementos de sintaxis (ver :help :syn-define
):
- Palabras clave: son para elementos que son simples cadenas de caracteres de palabras clave. Este es el matcher más rápido.
- Coincidencias: son expresiones regulares para emparejar.
- Regiones: son para regiones largas que probablemente contengan otros elementos.
Hay varios argumentos que complican las cosas (para hacer con las coincidencias dentro de las regiones, etc.), vea :help :syn-arguments
de sincronización para una discusión de esto.
Hay una prioridad que entra en vigor (ver :help :syn-priority
).
La coloración está controlada por el comando de resalte y está separada de los comandos de sintaxis.
Una forma sencilla de comenzar sería utilizar una coincidencia para detectar la fecha y una palabra clave para detectar un error. Luego usa el resalte para hacer que los colores cobren vida:
" This creates a keyword ERROR and puts it in the highlight group called logError
:syn keyword logError ERROR
" This creates a match on the date and puts in the highlight group called logDate. The
" nextgroup and skipwhite makes vim look for logTime after the match
:syn match logDate /^/d/{4}-/d/{2}-/d/{2}/ nextgroup=logTime skipwhite
" This creates a match on the time (but only if it follows the date)
:syn match logTime //d/{2}:/d/{2}:/d/{2},/d/{3}/
" Now make them appear:
" Link just links logError to the colouring for error
hi link logError Error
" Def means default colour - colourschemes can override
hi def logDate guibg=yellow guifg=blue
hi def logTime guibg=green guifg=white
Tape todo eso en ~ / .vim / syntax / log.vim y asegúrese de que el tipo de archivo esté configurado correctamente (consulte :help filetype.txt
) - luego se cargará automáticamente.
Esperemos que eso te dé algo para empezar. Haga una lectura (muy gradual) de las distintas secciones de :help syntax.txt
y :help usr_44.txt
para obtener más información.
Para cargar automáticamente con archivos * .log, debe hacer un ftplugin para este tipo de archivo.
Por ejemplo, en mi archivo log.vim
en mi carpeta .vim/ftplugin
tengo instrucciones simples para configurar un atajo de teclado al cargar archivos * .log.
Nota : ftplugins puede no ser la mejor manera de hacer esto ... configurar el archivo de sintaxis como Al describe es probablemente mejor. Voy a dejar esta respuesta aquí, aunque para la posibilidad alternativa.
Puedes empezar desde
syn match group1 /^/d/+-/d/+-/d/+/ nextgroup=group2 skipwhite
syn match group2 /....../ nextgroup=group3 contained skipwhite
syn match group3 /....../ nextgroup=group4 contained skipwhite
hi link group1 Comment
hi link group2 Conditional
hi link group3 Identifier
y luego simplemente continuar experimentando
Trate de usar Log4jHighlighter . Los detalles de instalación están presentes en github.