如何在Vim中仅显示连续≥2个空格?类似VS Code的boundary模式
在Vim中实现仅显示连续≥2个空格的效果(对标VS Code的
"editor.renderWhitespace": "boundary") 我的需求
之前我一直在用Vim的这个配置来可视化空格和制表符:
set listchars=tab:→\ ,trail:·,precedes:←,extends:→,nbsp:·,space:·
但现在我想调整成和VS Code里"editor.renderWhitespace": "boundary"完全一致的效果:只显示连续2个及以上的空格,字符之间的单个空格完全不显示。想知道Vim里能不能实现,不管是原生配置还是插件方式都可以。
已验证的可行方案
我已经通过原生Vim配置实现了这个需求,步骤如下:
- 先修改
listchars配置,移除其中的space项,避免和后续的匹配规则冲突:
set listchars=tab:→\ ,trail:·,precedes:←,extends:→,nbsp:·
- 使用
matchadd命令来精准匹配需要显示的连续空格,同时隐藏单个空格:
if exists('space_match') call matchdelete(space_match) endif let space_match = matchadd('Conceal', '\v( @<= )|( @=)', -1, -1, {'conceal': '·'})
- 正则说明:
\v( @<= )匹配的是紧跟在另一个空格之后的空格,( @=)匹配的是前面有另一个空格的空格,两者结合就只会标记连续空格中的空格,单个空格不会被选中渲染。 - 设置优先级为
-1是为了兼容indentLine插件,避免样式上的冲突。
特别感谢Ben Knoble提供的思路帮助!
内容的提问来源于stack exchange,提问作者hong4rc
相关产品推荐
相关产品推荐

