在vim中显示尾随空格


11

我想在终端vim中很好地显示尾随空格。这将允许我在关闭文件之前将其删除。

我知道这个问题很受欢迎,因此我已经找到了很多答案。不幸的是我还没有找到令人满意的...

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

解决方案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字符

如果您不喜欢红色,请选择其他颜色。如果您希望颜色与不同的配色方案兼容,请链接到颜色组名称,而不要使用特定的颜色,例如:hi link ExtraWhitespace CursorLine。请参阅:help hi-link
garyjohn

Answers:


4

在性能方面,这些都不应该有所作为。Vim通常被复杂的语法模式所困扰。这里的模式很简单。

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

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

我会去的,但是使用matchadd()代替:match; 这使后者可以自定义突出显示。另外,clearmatches()太粗糙了;它会删除所有匹配项,因此可能会影响插件。您可以使用/看看我的ShowTrailingWhitespace插件,以实现干净而强大的实现(其中还包括某些文件类型的异常)。是的,这是一个更大的解决方案,但我还没有发现任何影响。

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

这本身就是一个有用的功能,将其永久保留会对Tab字符上的光标定位产生影响,因此我不建议这样做。

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

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


因此,从您的回答中我了解到,有一个解决方案允许使用自定义Unicode字符标记多余的空格。这个问题确实比我最初想到的更加棘手。
nowox

是的,自定义字符仅适用于'listchars'。对我来说,突出显示已绰绰有余(尤其是带有激进色彩的)。
Ingo Karkat,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.