如何在Vim的模型行(modeline)中覆盖语法的注释字符?
如何在Vim的模型行(modeline)中覆盖语法的注释字符?
兄弟,我懂你这种小众工具适配的痛苦!你遇到的问题其实是Vim里两个独立功能的混淆——comments选项管的是编辑时的注释快捷键、自动缩进这类辅助操作,完全不影响语法高亮,后者是由语法脚本里的正则匹配规则控制的,所以光改comments自然没效果。
不想做新语法文件的话,咱们可以在模型行里直接修改当前缓冲区的语法匹配规则,给你一个能用的modeline写法:
\ vim: setlocal comments=:\\ | execute 'syn clear Comment' | execute 'syn match Comment "\\\\.*"'
来拆解下每部分的作用:
setlocal comments=:\\:还是保留这个设置,这样你用gc这类注释快捷键时,Vim会用\来添加/移除注释,不影响编辑体验;execute 'syn clear Comment':清除Vim默认asm语法里定义的Comment匹配规则(原来的规则是匹配#开头的内容);execute 'syn match Comment "\\\\.*"':重新定义Comment语法组,让它匹配所有以\开头的内容(这里的多重转义是因为Vim字符串里的反斜杠需要转义,最终正则里是\.*)。
你可以打开文件后,输入:syn list Comment来验证,要是看到匹配规则是\\.*就说明生效了,此时\开头的内容会被高亮成注释,#也不会被误当成注释了。
另外提个小注意:如果你的Vim配置里把modelineexpr设为0了,可能会限制模型行里执行execute命令,改回set modelineexpr=1就行,默认这个选项是开启的。
备注:内容来源于stack exchange,提问作者David Given
相关产品推荐
相关产品推荐

