在 VIM 中突出显示额外的空白和固定长度的列

在 VIM 中突出显示额外的空白和固定长度的列

我想使用 VIM 突出显示额外的空格和固定长度的列(例如,一行 80 个字符)

.vimrc我在我的文件中创建了两个 vimrc 规则

highlight ExtraWhitespacea ctermbg=darkred guibg=#382424
match ExtraWhitespacea /\s\+$/
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/

现在,问题是 - 如果单独应用,这些规则完全按照我想要的方式运行,但不能一起工作。

我在这里错过了什么吗?我该如何调试这个?

答案1

问题是每个:match命令都会覆盖前一个命令的模式;它们不是累积的!正因为如此,存在:2match各种:3match变体。使用其中之一:

highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
highlight OverLength ctermbg=red guibg=#525252
2match OverLength /\%81v.\+/

可以使用matchadd()Vimscript 函数创建其他变体。

笔记

  • 自 Vim 7.3 起,有一个内置'colorcolumn'选项可以突出显示列。
  • 您的设置~/.vimrc仅适用于第一个窗口;即 a:split将创建一个没有这些突出显示的窗口。您可以通过 autocmds(或使用该'colorcolumn'选项)修复该问题。
  • 有更强大和更复杂的解决方案来突出显示尾随空白,例如我的ShowTrailingWhitespace 插件。 (插件页面有替代插件的链接。)

答案2

可能是您的颜色方案覆盖了您的配置。您可以在末尾添加这些行.vimrc以防止覆盖,或者只需将这些行添加到您的.vimrc

" Highlight trailing white spaces
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

" Highlight long lines
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
autocmd BufWinEnter * match OverLength /\%81v.\+/
autocmd InsertEnter * match OverLength /\%81v.\+/
autocmd InsertLeave * match OverLength /\%81v.\+/
autocmd BufWinLeave * call clearmatches()

相关内容