2

我在 vim 中使用molokai来编写 python/html/css/javascript 中的代码。当我编辑 python 文件(或 javascript)时,括号没有颜色。对于括号为灰色的简单脚本(如 molokai.vim 本身),情况并非如此。

我编辑molokai.vim并添加

hi parens guifg=#999999

然后我编辑.vimrc并添加:

syn match parens /[(){}]/

但括号和括号仍然是白色的。

我究竟做错了什么?

4

1 回答 1

3
  1. 永远不要使用:syn突出显示所有文件类型,有matchadd()这个。使用:syn可以很容易地打破突出显示,matchadd()是一个覆盖。
  2. Syntax事件触发时语法突出显示被覆盖。而且,它只对当前缓冲区有影响。所以只是syn在 vimrc 中永远不会工作,你必须使用自动命令

    autocmd! Syntax python :syntax match Parens /[(){}]/
    

    (对于 python,它是安全的,因为括号和数字括号不与任何其他语法元素匹配)。

  3. 在 javascript 括号中 ( ()) 已经被javaScriptParens高亮组匹配。因此你必须使用

    hi def link javaScriptParens Parens
    

    (在配色方案中)。大括号匹配javaScriptBraces并需要类似的命令。

  4. 要确定用于特定符号的突出显示,我将光标放在该符号上并启动

    echo 'Normal '.join(map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")'))
    

    ,最后显示的单词通常是您需要的。如果仅Normal显示,则符号未突出显示,您必须转到 2.,否则您必须转到 3。

  5. 对于忽略当前使用的突出显示的通用解决方案,您可以使用matchadd()我已经说过的。但它是窗口本地的,所以如果你正在使用多个窗口/选项卡,你就不能没有 autocmd:

    autocmd! WinEnter * :if !exists('w:parens_match_id') | let w:parens_match_id=matchadd('Parens', '[(){}]') | endif
    

所有自动命令都将被包围

augroup HighlightParens
    autocmd! …
augroup END
于 2012-11-24T18:44:11.657 回答