Vim中syn match规则匹配正常但自定义高亮颜色不生效问题求助
问题原因
- 你的
syntax match规则写法有误:Vim 语法匹配的正则 pattern 不需要加搜索命令所用的/分隔符,你写的"/\$\w*"实际匹配的是「/开头 +$+ 单词字符」的内容,自定义的dollar分组根本没有命中你要的$word格式内容,你看到的黄色是文件类型自带的默认语法高亮颜色。 - 即便修正 pattern 后,自定义语法规则默认优先级低于文件类型内置的语法规则,也容易被覆盖导致不生效。
修复方案
首先替换你 vimrc 中原有的两行高亮相关配置:
" 去掉pattern前后的/,用+匹配至少1个单词字符避免匹配单独的$ " 加入priority=100提高优先级,containedin=ALL允许匹配所有语法区域内的内容 syntax match dollar "\$\w\+" containedin=ALL priority=100 " 同时配置终端和GUI下的颜色,避免GUI界面不生效 highlight dollar ctermfg=magenta guifg=magenta
如果打开Shell、PHP等自带$变量语法的文件时仍然显示黄色,说明文件类型语法加载时覆盖了你的规则,可以改用自动命令组保证规则优先级:
augroup CustomDollarHighlight autocmd! " 缓冲区加载完成后重新应用匹配规则 autocmd BufEnter * syntax match dollar "\$\w\+" containedin=ALL priority=100 " 切换配色方案时自动重新设置高亮颜色 autocmd ColorScheme * highlight dollar ctermfg=magenta guifg=magenta augroup END
验证方法
修改配置重启Vim后,打开测试文件执行以下命令确认配置生效:
- 执行
:syntax list dollar可以看到该分组命中的所有$word内容 - 执行
:highlight dollar可以查看当前生效的颜色参数,确认ctermfg值为magenta
内容的提问来源于stack exchange,提问作者Nicodoki
相关产品推荐
相关产品推荐

