我是vim语法突出显示自定义的新手。尝试创建基于文本的呼叫路径描述文件:
// Entry point
Class1#mainMethod
Class1#privateMethod2
Class2#method3
Class3#method4
Class4#method5
在plantUML中,等效项为:
ExternalActor -> Class1 : mainMethod
Class1 -> Class1 : privateMethod2()
Class1 -> Class2 : method3()
Class2 -> Class3 : method4()
Class1 -> Class4 : method5()
我已经有了一些不错的语法文件,使其看起来像这样:
当前语法文件如下:
syn keyword celTodo contained TODO FIXME XXX NOTE
syn match celComment "//.*$" oneline contains=celTodo
hi celComment ctermfg=yellow
hi celTodo ctermfg=green
syn match methodCall /\(#\)\@<=\w*/ contained oneline
hi methodCall ctermfg=blue
syn match className /\w*\(#\)\@=/ contained oneline
hi className ctermfg=red
syn region line start='\(\.\)\@<=\w' end='.\($\)\@=' oneline fold transparent contains=celComment,className,methodCall
我认为针对同一类的每次出现使用不同的背景色将有助于更好地理解序列。 有没有办法实现这一目标?,以便Class1的背景颜色与Class2、3和4不同。但是每个类始终具有相同的一致颜色。
答案 0 :(得分:1)
语法突出显示将关键字,模式匹配或区域与语法组相关联。然后,相应的 highlight组(直接或通过链接组间接)确定文本的颜色和格式。
为了使每个类名称具有不同的(背景或其他)颜色,您必须定义不同的语法组,并分配不同的突出显示组。您的语法文件不仅会有一组固定的:syntax match
命令,而且还有一个循环,该循环从当前缓冲区中提取匹配项,并在语法加载时构建相应的:syntax match
和:highlight
命令(使用:execute
)。
然后,如果用户添加或更改了类名,则存在更新问题。通常,语法是静态的,因此一旦加载,就完成了。对于您的情况,您必须定义:autocmd
来定期重新扫描缓冲区,并添加新的类名(甚至可能回收未使用的突出显示组名,以免耗尽颜色)。 CursorHold
事件将是一个很好的选择,但是会延迟一段时间直到颜色显示出来。如果要使其他用户可以使用此语法,则可用的颜色是另一个问题。颜色的数量可能千差万别,要想出适合各种颜色方案的背景颜色很难。
有可能,但是对于语法而言这是不寻常的,并且具有诸如更新延迟或性能不佳的副作用。 (不过,我已经看到它用于突出显示 tags文件中的函数名称。)某些用户肯定希望将其关闭。
对于类名很少(或非常不同)的小文件,可能不需要额外的突出显示。对于具有许多类的大型文件,所有内容都亮起来会使它看起来像一棵圣诞树,并且所有的颜色可能比帮助有用更分散注意力。我宁愿让用户根据需要对感兴趣的 some 类进行此类突出显示。我的Mark plugin为此提供了通用功能,并且不干扰语法突出显示,并且随附了看起来像文本标记突出显示的调色板。我经常使用它来更好地定位日志文件或旧代码库。 (插件页面上有其他插件的链接;有一些。)
cel
,请使用celMethodCall
代替methodCall
,依此类推。:hi
命令全部放在底部;大多数语法插件都是这样做的。:help highlight-groups
)使用:hi link
。即使是供个人使用,在~/.vimrc
中定义颜色的好处是可以在单个位置进行修改和重复使用,而不必搜寻各种语法脚本。:hi def
,用户可以自定义语法,例如在他们的~/.vimrc
中。 :help 44.12
提供了有关编写语法插件的更多信息。