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