我现在正在和vim合作几个月,我仍然试着通过这位伟大的编辑来改善我的经验。
我尝试做的是为spice网表(电子资料)创建一个语法高亮文件。
我正在尝试强调以下模式:
.SUBCKT or_gate A B OUT
(* or_gate *是单元格的名称
A , B 和 OUT 此单元格的bieng引脚)
我尝试做的是用3种不同颜色突出显示它:
所以我正在查看以.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。
最后,我没有设法让它发挥作用,我只是觉得我做得更复杂了。
任何人都可以帮我弄清楚我的错误是什么,以及如何处理这种模式突出显示?
答案 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/
我刚做了一个小测试。我没有你的语法组,我只是尝试使用默认组,它看起来像这样:
答案 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; =的行使得屏幕有点滞后。我还在尝试着它。