在 vim 中显示尾随空格

在 vim 中显示尾随空格

我希望在终端 vim 中漂亮地显示尾随空格。这样我就可以在关闭文件之前删除它们。

我知道这个问题很受欢迎,我已经在 SO 上找到了几十个答案。不幸的是,我还没有找到一个令人满意的答案……

因此我将尝试总结收集到的信息和我找到的解决方案。

解决方案 1:手动突出显示尾随空格

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

突出显示尾随空格

优点:

  • 便于使用
  • 快速地
  • 兼容cursorline

缺点:

  • 所选颜色与其他配色方案不兼容,因为颜色是手动设置为red
  • 大红色背景块不太美观

解决方案 2:使用列表功能

set list
set listchars+=trail:◦

在此处输入图片描述 在此处输入图片描述

优点:

  • 便于使用
  • 快速地

缺点:

  • :set cursorline启用时发出
  • 专用颜色list/trail不可配置。必须与其他列表字符相同

解决方案 3:使用隐藏功能

syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2 
set concealcursor=nv
highlight Conceal ctermfg=red

在此处输入图片描述 在此处输入图片描述

优点:

  • 比第一个解决方案更漂亮

缺点:

  • 背景与光标线背景不同
  • 可能会干扰其他隐藏规则
  • 所选颜色并不总是与配色方案兼容
  • 与旧版本的 Vim 不兼容

我的问题

在性能和兼容性方面,哪一个解决方案是最合适的,我怎样才能获得所有的优点而没有任何缺点?

换句话说,我想找到一个解决方案:

  • 高亮尾部颜色与所选的配色方案一致
  • 这种颜色清晰可见,但又不会太刺眼
  • 兼容cursorline(背景和前景)`
  • 与其他可能使用隐藏的插件兼容
  • 尾随字符可以设置为任何 Unicode 字符

答案1

就性能而言,这些都不应该产生影响。Vim 大多因复杂的语法模式而陷入困境;而这里的模式非常简单。

要使高亮颜色与所选的配色方案一致,请使用:hi link现有组;通常,这将是Error。当然,只有当您经常切换(完全不同的)配色方案时,这些才重要;否则,直接使用合适的颜色(如您的解决方案 1 中所示)也可以。

解决方案 1:手动突出显示尾随空格

我会选择这个,但使用matchadd()而不是:match;这会让后者用于自定义突出显示。此外,clearmatches()太粗糙了;它会删除全部匹配,因此可能会影响插件。您可以使用/查看我的ShowTrailingWhitespace 插件实现简洁而强大的实现(其中还包括某些文件类型的例外情况)。是的,这是一个更大的解决方案,但我还没有注意到任何影响。

解决方案 2:使用列表功能

这本身就是一个有用的功能,并且一直保持开启会影响 Tab 字符上的光标定位,所以我不推荐这样做。

解决方案 3:使用隐藏功能

这肯定会干扰使用该功能的一些语法和插件。坏主意。

相关内容