2010-11-12 20 views
6

cómo resaltar cadenas que comienzan con sql_ y están entre comillas?resaltado de sintaxis personalizado en Vim

Mi archivo de registro:

MGPostgreSQLConnection.OpenQuery; "sql_p_factory_history"-ExecTime: 47ms 
2010-11-12T17:28:18+01:00;custom; MGPostgreSQLConnection.OpenQuery; "sql_p_factory_history"-ExecTime+FetchTime: 47ms 
2010-11-12T17:28:18+01:00;custom; MGPostgreSQLConnection.OpenQuery; "sql_factory"-ExecTime: 47ms 
2010-11-12T17:28:18+01:00;custom; MGPostgreSQLConnection.OpenQuery; "sql_factory_contactperson"-ExecTime+FetchTime: 62ms 

Mi vimrc (Esto no funciona, por supuesto):

au BufRead,BufNewFile *.log syn match "sql_*" 
au BufRead,BufNewFile *.log hi sql guifg=white guibg=red 

Respuesta

2

La sintaxis para syn match es syn match highlight_group reg_exp.

Así, intenta:

au BufRead,BufNewFile *.log syn match Todo /"sql_\w\+"/ 

¿Por qué no leer la ayuda de :syn? La ayuda de Vim es tan buena que encuentras todas las respuestas rápidamente :)

:help :syntax 
6

¡Estuviste casi allí! Esta versión (funciona y) no resalta las comillas.

au BufRead,BufNewFile *.log hi sql guifg=white guibg=red ctermfg=white ctermbg=red 
au BufRead,BufNewFile *.log syn match sql /"\zssql_\w*\ze"/ 

screen-shot

Véase lo siguiente para más información:

  • :help :syn-match "para la adaptación de la sintaxis, erm, la sintaxis
  • :help /\zs" establece el comienzo del partido no
  • :help /\ze "establece el final del partido allí
  • :help /\w "carácter de palabra

Depuración:

El comando :verbose :syn debería darle algo como esto:

--- Syntax items --- 
[...] 
sql   xxx match /"\zssql_\w*\ze"/ 

Y :verbose :hi:

 Last set from ~/.vimrc 
[...] 
sql   xxx cterm=bold ctermfg=7 ctermbg=1 guifg=white guibg=red 

El xxx debe estar en los mismos colores que usted ha especificado (y se ve como el resaltado en mi captura de pantalla). Si no ve los, compruebe que su .vimrc (o _vimrc en Windows) tiene su fuente:

:scriptnames 
1: /home/javh/.vimrc 
[...] 

Por supuesto, esto sólo funciona cuando:

:echo has('syntax') 

... vuelve 1 (o :version incluye +syntax).

+1

que '\ zs' y' \ ze' es bueno si no desea resaltar los araos. Pero creo que el '[^"] * 'es demasiado permisivo. – Benoit

+0

Gracias @Benoit. Actualicé mi respuesta en consecuencia. – Johnsyweb

+0

Gracias por su ayuda. Sus soluciones no me funcionan, pero tal vez me señalan en la dirección correcta. . – JAVH

0

Otra forma de hacerlo, sin syntax match, es utilizar el comando :match o el comando matchadd() directamente.

En resumen:

" to enable 
:match Todo /"\@<=sql_\w\+"\@=/ 
" reference: 
" \@<= is such a beautiful duck, :help /\@<= for more help 
" :help /\@= for the \@= part, also. 
" 
" to cancel 
:match none 
" :help :match/:help :2match/:help :3match 

o

" to enable 
:call matchadd('Todo', '"\zssql_\w\+\ze"') 
" or 
:let foobarbaz = matchadd('Todo', '"\zssql_\w\+\ze"') 
" 
" to disable 
:call matchdelete(foobarbaz) 
" or 
:call clearmatches() 
Cuestiones relacionadas