2010-11-12 121 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()