在 vim 中显示尾随空格

now*_*wox 12 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()
Run Code Online (Sandbox Code Playgroud)

突出显示尾随空格

优点:

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

缺点:

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

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

set list
set listchars+=trail:?
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 在此处输入图片说明

优点:

  • 便于使用
  • 快速地

缺点:

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

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

syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=?
set conceallevel=2 
set concealcursor=nv
highlight Conceal ctermfg=red
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 在此处输入图片说明

优点:

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

缺点:

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

我的问题

列举的解决方案中哪一种在性能和兼容性方面最合适,我如何才能获得所有优点而没有缺点?

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

  • 突出显示的尾随颜色与所选的配色方案一致
  • 这种颜色清晰可见,但对眼睛不太有侵略性
  • 兼容cursorline(背景和前景)`
  • 与其他可能使用隐藏的插件兼容
  • 尾随字符可以设置为任何 Unicode 字符

Ing*_*kat 4

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

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

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

我会这样做,但使用matchadd()而不是:match; 这使得后者用于自定义突出显示。还有,clearmatches()太粗了;它会删除所有匹配项,因此可能会影响插件。您可以使用/查看我的ShowTrailingWhitespace 插件以获得干净而强大的实现(还包括某些文件类型的例外)。是的,这是一个更大的解决方案,但我还没有注意到任何影响。

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

这本身就是一个有用的功能,并且永久保留它会影响制表符上的光标定位,因此我不建议这样做。

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

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