Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim中的自定义语法高亮显示_Vim_Vim Syntax Highlighting - Fatal编程技术网

Vim中的自定义语法高亮显示

Vim中的自定义语法高亮显示,vim,vim-syntax-highlighting,Vim,Vim Syntax Highlighting,如何突出显示以sql\u开头并包含引号的字符串 我的日志文件: 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;cu

如何突出显示以
sql\u
开头并包含引号的字符串

我的日志文件:

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(当然,这不起作用):


你看到这条线了吗

syn match的语法是
syn match highlight\u group reg\u exp

因此,请尝试:

au BufRead,BufNewFile *.log syn match Todo /"sql_\w\+"/
为什么不阅读
:syn
的帮助?Vim帮助非常好,您可以快速找到所有答案:)


你就快到了!此版本(有效且)不突出引号

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

有关更多信息,请参见以下内容:

  • :帮助: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
(或Windows上的
\u vimrc
)是否来源:

:scriptnames
1: /home/javh/.vimrc
[...]
当然,这仅在以下情况下有效:

:echo has('syntax')

…返回
1
(或
:version
包括
+语法
)。

另一种方法,在不使用
语法匹配的情况下,是直接使用
: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

谢谢,但我需要一个特殊的“syn匹配”。如果您不想突出显示guillemots,那么
\zs
\ze
就很好了。但是我认为
[^”]*
有点过于宽容。谢谢你的帮助。你的解决方案对我不起作用,但可能会给我指明正确的方向。“不起作用。””“怎么了?我刚刚测试并上传了一个截图。我相信你,即使没有你的截图。我不知道为什么它对我不起作用。如果你用你的操作系统的详细信息更新你的问题,哪个版本的Vim以及你遇到的任何错误,我会尽力帮助你。
:echo has('syntax')
" 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()