我用了:

set listchars=tab:→\ ,trail:·,precedes:←,extends:→,nbsp:·,space:·

渲染空格和制表符。

但是我只想显示 >=2 个空格,如果它在其他字符之间有一个空格,我不想显示。

(这是同样在vscode "editor.renderWhitespace": "boundary"的)
vim - 如果 Vim 中有多个空间,则渲染空间-LMLPHP

我可以在 Vim 中做到吗? ( configplugin )

谢谢你。

编辑: 我使用:
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': '·'})
    
  • 优先级 -1indentLine
  • 兼容
  • ( @<= ) 匹配一个空格后一个空格
  • ( @=) 匹配另一个空格之前的空格
  • 关于vim - 如果 Vim 中有多个空间,则渲染空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58152552/

    10-10 13:53