我希望在终端 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:使用隐藏功能
这肯定会干扰使用该功能的一些语法和插件。坏主意。