我用了:
set listchars=tab:?\ ,trail:·,precedes:?,extends:?,nbsp:·,space:·
Run Code Online (Sandbox Code Playgroud)
渲染空格和制表符。
但是我只想显示 >=2 个空格,如果它在其他字符之间有一个空格,我不想显示。
("editor.renderWhitespace": "boundary"在vscode中是一样的)

我可以在 Vim 中做到吗?(config或plugin)
谢谢你。
编辑:我使用:
if exists('space_match')
call matchdelete(space_match)
endif
let space_match = matchadd('Conceal', '\v( @<= )|( @=)', -1, -1, {'conceal': '·'})
Run Code Online (Sandbox Code Playgroud)
-1兼容indentLine( @<= ) 匹配一个又一个空格( @=) 在另一个空格之前匹配一个空格并删除空间listchars:
set listchars=tab:?\ ,trail:·,precedes:?,extends:?,nbsp:·
Run Code Online (Sandbox Code Playgroud)
非常感谢 Ben Knoble 帮我找到了!!!
使用隐藏,有几种方法可以实现,具体取决于您想要实现的目标。由于我们使用的是隐藏,因此您需要space从'listchars'.
我将在
matchadd()下面使用,但理论上您可以使用syn-conceal. 不同之处在于匹配是窗口本地的。语法在定义的地方可用——你可以使用任何文件类型或其他机制通过语法来设置它。我假设正则表达式
\s(匹配空格)符合您的需要。如果您只需要空格,请在正则表达式中更改\s为(单个空格字符)。我假设您可以阅读 vim regexp。帮助页面非常广泛,但请注意下面我用于
\v显式设置魔法类型(matchadd对 regex 影响选项敏感,如'magic'),并\zs在适当的地方使用来开始匹配。我将使用下面的测试文本。
word word word word
word word word word
Run Code Online (Sandbox Code Playgroud)
set conceallevel=1在第 1 级,我们可以在比赛中使用替换字符。
所以,我们可以用例如 a 替换所有额外的空格,.使它们脱颖而出:
let space_match = matchadd('Conceal', '\s\@<=\s+', 10, -1, {'conceal': '.'})
Run Code Online (Sandbox Code Playgroud)
(10 是默认优先级,-1 为匹配请求一个新 ID。)
要摆脱匹配/隐藏,您可以简单地
call matchdelete(space_match)
Run Code Online (Sandbox Code Playgroud)
OP 表示以下方法最适合这个问题:
let space_match = matchadd('Conceal', '\v( @<= )|( @=)', -1, -1, {'conceal': '·'})
Run Code Online (Sandbox Code Playgroud)
-1兼容indentLine( @<= ) 匹配一个又一个空格( @=) 在另一个空格之前匹配一个空格