如何提升FloatToInt语法匹配优先级,在Vim/Neovim中隐藏XML小数?
Vim/Neovim中XML文件浮点数转整数的Conceal规则优化
问题背景
我有如下XML数据:
<layer> <path data="S 35.33333,70.61539 L 34.46154,23.28205"/> <path data="S 30.66667,12.5641 D 33.64103,12.5641 37.58974"/> </layer>
希望在Vim/Neovim普通模式下通过conceal功能将浮点数显示为整数,当前使用命令:
:set conceallevel=2 -- 1, 2 or 3 all work :syntax match FloatToInt /\.\d\+/ conceal
但文件已有自定义XML语法,导致该conceal规则失效。我希望保留原有语法,同时提升此语法匹配的优先级,尝试的:syntax match FloatToInt /\.\d\+/ conceal priority=0命令不正确,请问有什么可行方法?
可行解决方案
1. 正确设置语法匹配优先级
Vim的syntax match优先级参数需将数值放在命令末尾,数值越大优先级越高(默认优先级为10)。设置比原有XML语法更高的优先级(比如20),确保规则优先生效:
:set conceallevel=2 :syntax match FloatToInt /\.\d\+/ conceal priority=20
2. 限定匹配范围(精准生效)
如果只想针对XML的data属性值里的浮点数处理,可将规则限定在XML字符串语法组内,避免影响其他XML元素:
:syntax match FloatToInt /\.\d\+/ conceal containedin=xmlString priority=20
containedin=xmlString表示仅在XML属性值的字符串范围内应用该规则,既保留原有XML语法,又精准匹配目标内容。
3. 确保规则在XML语法加载后执行
如果是在配置文件(如vimrc或init.lua)中设置,使用autocmd延迟加载规则,避免被原有XML语法覆盖:
autocmd FileType xml set conceallevel=2 | syntax match FloatToInt /\.\d\+/ conceal containedin=xmlString priority=20
这样会在XML文件类型加载完成后再应用自定义规则,确保优先级生效。
内容的提问来源于stack exchange,提问作者Carson
相关产品推荐
相关产品推荐

