2010-11-12 10 views
6

wie Zeichenfolgen hervorgehoben werden, die mit sql_ beginnen und in Anführungszeichen stehen?Benutzerdefinierte Syntax-Hervorhebung in Vim

Mein Logfile:

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 

Mein vimrc (Dies funktioniert allerdings nicht, natürlich):

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

Antwort

2

Die Syntax für syn match lautet syn match highlight_group reg_exp.

Also, versuchen Sie:

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

Warum Sie die Hilfe für :syn nicht lesen? Vim Hilfe ist so gut, dass Sie alle Antworten schnell finden :)

:help :syntax 
6

Sie waren fast da! Diese Version (funktioniert und) hebt die Anführungszeichen nicht hervor.

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

Siehe für weitere Informationen folgende:

  • :help :syn-match "für Syntax-Matching, erm, Syntax
  • :help /\zs" setzt den Beginn des Spiels gibt
  • :help /\ze "setzt das Ende des Spiels dort
  • :help /\w "Wortzeichen

Debugging:

Der Befehl :verbose :syn sollten Sie so etwas wie dieses geben:

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

Und :verbose :hi:

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

Die xxx sollte in den gleichen Farben wie Sie angegeben haben (und wie die Hervorhebung in meinem Screenshot aussehen). Wenn Sie nicht mit denen sehen, dass Ihre .vimrc (oder _vimrc auf Windows) bezogen ist:

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

Natürlich funktioniert dies nur, wenn:

:echo has('syntax') 

... kehrt 1 (oder :version enthält +syntax).

+1

das '\ zs' und' \ ze' ist gut, wenn du die Trottellummen nicht hervorheben willst. Aber ich denke, dass die '[^"] * 'ein bisschen zu freizügig ist. – Benoit

+0

Danke @Benoit. Aktualisiert meine Antwort entsprechend. – Johnsyweb

+0

Danke für Ihre Hilfe.Ihre Lösungen funktioniert nicht für mich, aber vielleicht zeigt mir in die richtige Richtung – JAVH

0

Eine andere Möglichkeit ohne syntax match ist die direkte Verwendung des Befehls :match oder matchadd().

In Kürze:

" 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 

oder

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