Vim语法高亮:删除语法关键字

7

我使用的vim插件之一执行以下操作:

syn keyword rustTodo contained TODO FIXME XXX NB NOTE

这会在注释中突出显示NB,但我不喜欢。 有没有办法重新定义关键字或从中删除一个? 查看:help syn-keyword让我认为这是不可能的。


你使用什么插件管理器?你可以尝试fork插件repo,应用你的补丁并在配置文件中连接fork。但这可能有些过度。 - mucka
2个回答

9
如果rustTodo只有这一个定义(它们是累积的),你可以删除并重新定义它:
syn clear rustTodo
syn keyword rustTodo contained TODO FIXME XXX NOTE

很遗憾,语法项的删除粒度仅限于整个语法组(这里是:rustTodo);除非它们也有单独的组(这将导致高亮组更多地链接,因此效率低下),否则您不能选择单个关键字。
要使其永久生效,请将其放入~/.vim/after/syntax/rust.vim中。
如果您认为大多数用户不喜欢这里的NB,请建议作者放弃它。将其作为个人定制添加回来比删除它更容易和可维护...

1
这并不是真正的答案,只是一个解决方法。我有同样的问题,但这个解决方法对我来说是不可接受的。我真的需要删除一个现有的关键字。例如,类似于“syn!keyword rustTodo NB”(注意“!”)。这可能吗? - Carlo Wood
特意添加了 after 目录来进行这样的自定义,所以我会说它不仅仅是一个解决方法。还有更干净和可维护的方式,但需要对原始语法脚本进行更改(例如定义一个配置变量而不是硬编码关键字)。 - Ingo Karkat
好的,我的评论“不是真正的答案”更多是技术性的。如果您编辑您的答案并添加“不,这是不可能的(最好您能做的是...”,那么它就是一个答案了。我现在仍然不清楚这是否可能(尽管从我到目前为止所读到的内容来看似乎不可能)。 - Carlo Wood
好的,看起来我是个不太好的读者。标题中的问题是我需要的,但OP明确表示“是否有一种方法重新定义关键字或...”。无论如何,感谢您超快的回复;)! - Carlo Wood
@CarloWood 不用担心。我已经扩展了我的答案,现在更清晰了。 - Ingo Karkat

0
我曾在从其他语法文件中导入语法文件时遇到类似的问题,并想出了一个不太正规的方法。
与其使用“加载语法文件”的方式,试试这个方法:
syn include @othersyntax syntax/othersyntax.vim

你可以使用

syn include @othersyntax !sed 's/<NB>//' syntax/othersyntax.vim

呃,这会带来严重的平台依赖和安全问题,但至少可以减轻你与上游同步替换关键字列表的负担。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接