我希望在我的终端 vim 中有一个漂亮而甜美的尾随空白显示。这将允许我在关闭文件之前删除它们。
我知道这个问题很受欢迎,我已经在 SO 上找到了几十个答案。不幸的是,我还没有找到一个令人满意的...
因此,我将尝试总结收集到的信息和我找到的解决方案。
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缺点:
redset list
set listchars+=trail:?
Run Code Online (Sandbox Code Playgroud)

优点:
缺点:
:set cursorline启用时发出问题list/trail不可配置。必须与其他列表字符相同syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=?
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Run Code Online (Sandbox Code Playgroud)

优点:
缺点:
列举的解决方案中哪一种在性能和兼容性方面最合适,我如何才能获得所有优点而没有缺点?
换句话说,我想找到一个解决方案,其中:
- 突出显示的尾随颜色与所选的配色方案一致
- 这种颜色清晰可见,但对眼睛不太有侵略性
- 兼容
cursorline(背景和前景)`- 与其他可能使用隐藏的插件兼容
- 尾随字符可以设置为任何 Unicode 字符
就性能而言,这些都不会产生影响。Vim 大多会陷入复杂的语法模式的困境;这里的模式非常简单。
要使突出显示颜色与所选颜色方案一致,请使用:hi link现有组;通常,那就是Error. 当然,只有当您经常切换(完全不同的)配色方案时,这一切才有意义;否则,直接使用合适的颜色(如解决方案 1 中所示)也可以。
解决方案 1:手动突出显示尾随空格
我会这样做,但使用matchadd()而不是:match; 这使得后者用于自定义突出显示。还有,clearmatches()太粗了;它会删除所有匹配项,因此可能会影响插件。您可以使用/查看我的ShowTrailingWhitespace 插件以获得干净而强大的实现(还包括某些文件类型的例外)。是的,这是一个更大的解决方案,但我还没有注意到任何影响。
解决方案2:使用列表功能
这本身就是一个有用的功能,并且永久保留它会影响制表符上的光标定位,因此我不建议这样做。
解决方案 3:使用隐藏功能
这肯定会干扰使用该功能的某些语法和插件。馊主意。
| 归档时间: |
|
| 查看次数: |
9129 次 |
| 最近记录: |