6

如何突出显示以引号开头sql_和引号内的字符串?

我的日志文件:

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
4

4 回答 4

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"/

截屏

有关详细信息,请参阅以下内容:

  • :help :syn-match" 用于语法匹配,erm,语法
  • :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)。

于 2010-11-12T17:49:15.120 回答
2

的语法syn matchsyn match highlight_group reg_exp.

所以,试试:

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

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

:help :syntax
于 2010-11-12T17:46:27.083 回答
0

你看到这个线程了吗?VIM:创建语法高亮文件的简单步骤 - 用于日志文件

于 2010-11-12T17:41:29.380 回答
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()
于 2010-11-12T20:36:33.093 回答