我用过:
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)帮助我找到了!!!
使用隐藏,有两种方法可以实现,具体取决于您要实现的目标。
我将在下面使用
matchadd()
,但理论上您可以使用syn-conceal
做类似的事情。区别在于,匹配项是窗口的局部项。可以在定义的地方使用语法-您可以使用任何文件类型或其他机制通过语法进行设置。我假设正则表达式
\s
(匹配空白)符合您的需求。如果只需要空格,请在正则表达式中将\s
更改为(单个空格字符)。
我假设您可以阅读vim regexp。帮助页面内容广泛,但请注意以下内容:我使用
\v
显式设置魔术类型(matchadd
对影响'magic'
等正则表达式的选项敏感),并且在适当的地方使用\zs
开始比赛。我将在下面使用测试文本。
word word word word
word word word word
set conceallevel=1
在第1级,我们被允许在比赛中使用替换字符。
因此,我们可以用.
代替所有多余的空格,以使其突出:
let space_match = matchadd('Conceal', '\v\s\zs\s+', 10, -1, {'conceal': '.'})
((10是默认优先级,并且-1请求一个新ID用于匹配。)
要摆脱匹配/隐藏,您可以简单地
call matchdelete(space_match)