在我看来,最好的选择是使用 matchit。该脚本是 vim 运行时的一部分,可以通过将以下行添加到 .vimrc 轻松加载:
runtime macros/matchit.vim
标准 Verilog 文件类型插件已包含您需要的 matchit 配置:
" Let the matchit plugin know what items can be matched.
if exists("loaded_matchit")
let b:match_ignorecase=0
let b:match_words=
\ '\<begin\>:\<end\>,' .
\ '\<case\>\|\<casex\>\|\<casez\>:\<endcase\>,' .
\ '\<module\>:\<endmodule\>,' .
\ '\<if\>:\<else\>,' .
\ '\<function\>:\<endfunction\>,' .
\ '`ifdef\>:`else\>:`endif\>,' .
\ '\<task\>:\<endtask\>,' .
\ '\<specify\>:\<endspecify\>'
endif
这样你就可以使用匹配开始/结束%
key,就像您可能已经对括号等所做的那样。
这并不完全是您想要的,因为虽然它允许您找到开头的匹配结尾,但它不会为您突出显示它。我做了一些研究,显然有一个代码片段 http://objectmix.com/editors/377087-matchit-plugin-highlighting.html;有人已经将该代码转换成一个插件,名为hl_matchit https://github.com/vimtaku/hl_matchit.vim。不要忘记检查该插件的帮助页面:
:help hl_matchit.txt
请注意,vim 安装中包含的 Verilog 文件类型插件不支持ifndef
and elsif
Verilog 2001 中引入的子句。如果您需要这个,那么我建议您还安装前面已经提到的 verilog_systemverilog.vim 插件,但使用fork https://github.com/vhda/verilog_systemverilog.vim我正在改进,其中包括上述更新以及其他修复/改进。