2010-11-12 100 views
6

如何突出显示以sql_开头且位于引号内的字符串?在Vim中自定义语法高亮

我的日志文件:

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 

我的vimrc(这不工作,当然):

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

回答

2

syn match的语法是syn match highlight_group reg_exp

所以,尽量:

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

你为什么不读:syn的帮助? Vim的帮助非常好,您可以快速找到所有答案:)

:help :syntax 
6

您快到了!此版本(作品和)不突出显示引号。

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

更多信息请参阅以下内容:

  • :help :syn-match “语法匹配,呃,语法
  • :help /\zs” 并将匹配有
  • :help /\ze开始“设置比赛结束
  • :help /\w“字性格

调试:

命令:verbose :syn应该给你这样的事情:

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

而且:verbose :hi

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

xxx应该与您指定的颜色相同(并且看起来像我的屏幕快照中的高亮显示)。如果没有看到这些,请检查您.vimrc(或_vimrc在Windows上)的来源:

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

当然这只能在:

:echo has('syntax') 

...返回1(或:version包括+syntax)。

+1

如果你不想突出海员的话,'\ zs'和'\ ze'很​​好。但是我认为'[^“] *'有点太宽松了。 – Benoit 2010-11-12 17:51:27

+0

谢谢@Benoit。我的回答相应地更新了。 – Johnsyweb 2010-11-12 17:56:45

+0

感谢您的帮助。您的解决方案对我无效,但可能会使我指向正确的方向 – JAVH 2010-11-12 18:16:59

0

另一种不使用syntax match的方法是直接使用:match命令或matchadd()命令。

简单:

" 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 

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