Vim突出显示嵌套区域

时间:2013-03-30 17:29:14

标签: vim vim-syntax-highlighting

我现在正在和vim合作几个月,我仍然试着通过这位伟大的编辑来改善我的经验。

我尝试做的是为spice网表(电子资料)创建一个语法高亮文件。

我正在尝试强调以下模式:

  

.SUBCKT or_gate A B OUT

(* or_gate *是单元格的名称
A B OUT 此单元格的bieng引脚)

我尝试做的是用3种不同颜色突出显示它:

  • 一个用于.SUBCKT
  • 一个用于or_gate(单元格)
  • 一个用于A,B和OUT(引脚)

所以我正在查看以.SUBCKT开头的行,我试图找到一种方法来匹配该行的不同单词。

我尝试了很多 syn match 或嵌套 syn region 的不同组合,但我只是觉得我做错了。

以下是我尝试过的一个例子:

  

syn region spiceCKT 开始 =“\。SUBCKT”结束 =“$”包含 = spiceCell, spicePins

     

syn region spiceCell 开始 =“\。SUBCKT”rs = e 结束 =“$”包含

     

syn region spicePins 开始 =“\ .SUBCKT \ s \ S *”rs = e 结束 =“$”

我尝试使用模式(\ s \ S *),添加/删除rs = e部分,甚至定义 start end 模式添加\ zs和\ ze。

最后,我没有设法让它发挥作用,我只是觉得我做得更复杂了。

任何人都可以帮我弄清楚我的错误是什么,以及如何处理这种模式突出显示?

2 个答案:

答案 0 :(得分:2)

您可以使用syn match尝试look-behind

syn match spiceCKT /^\s*\.SUBCKT/
syn match spiceCell /\v(^\s*\.SUBCKT\s+)@<=or_gate/
syn match spicePins /\v(^\s*\.SUBCKT\s+or_gate\s+)@<=A B OUT/

我刚做了一个小测试。我没有你的语法组,我只是尝试使用默认组,它看起来像这样:

enter image description here

答案 1 :(得分:0)

感谢您的回答! 它确实有效。谢谢你的提示。

唯一的缺点是,当文件必须加载完整的行时,它会有点慢。

我完成了您的代码以满足我的需求:

  

syn match spiceCKT / ^ \ s * .SUBCKT /

     

syn match spiceCell / \ v(^ \ s * .SUBCKT \ s +)@&lt; = \ S * \ s + /

     

syn match spicePins / \ v(^ \ s * .SUBCKT \ s + or_gate \ s +)@&lt; =(\ s * \ S *)* /

当我向下滚动时,@&lt; =的行使得屏幕有点滞后。我还在尝试着它。