我用了:
set listchars=tab:→\ ,trail:·,precedes:←,extends:→,nbsp:·,space:·
渲染空格和制表符。
但是我只想显示 >=2 个空格,如果它在其他字符之间有一个空格,我不想显示。
(这是同样在vscode
"editor.renderWhitespace": "boundary"
的)我可以在 Vim 中做到吗? (
config
或 plugin
)谢谢你。
编辑: 我使用:
if exists('space_match')
call matchdelete(space_match)
endif
let space_match = matchadd('Conceal', '\v( @<= )|( @=)', -1, -1, {'conceal': '·'})
-1
到兼容indentLine
( @<= )
匹配一个空格后一个空格 ( @=)
匹配另一个空格之前的空格 并删除
listchars
中的空格:set listchars=tab:→\ ,trail:·,precedes:←,extends:→,nbsp:·
非常感谢 Ben Knoble 帮我找到了!!!
最佳答案
使用隐藏,有几种方法可以实现,具体取决于您想要实现的目标。由于我们使用的是隐藏,您需要从 space
中删除 'listchars'
。
测试文件
word word word word
word word word word
set conceallevel=1
在第 1 级,我们可以在比赛中使用替换字符。
因此,我们可以用例如
.
替换所有额外的空格,使它们脱颖而出:let space_match = matchadd('Conceal', '\s\@<=\s+', 10, -1, {'conceal': '.'})
(10 是默认优先级,-1 为匹配请求一个新 ID。)
打扫干净
要摆脱匹配/隐藏,您可以简单地
call matchdelete(space_match)
OP 表示以下方法最适合这个问题:
let space_match = matchadd('Conceal', '\v( @<= )|( @=)', -1, -1, {'conceal': '·'})
-1
与 indentLine
( @<= )
匹配一个空格后一个空格 ( @=)
匹配另一个空格之前的空格 关于vim - 如果 Vim 中有多个空间,则渲染空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58152552/