vim为listchars选项卡和空格设置颜色

Hel*_*rld 25 vim

在VIM中使用以下代码的概念如何使选项卡为浅灰色背景,空格为蓝色背景

" part of ~/.vimrc
" highlight tabs and trailing spaces
set listchars=tab:>-,trail:-
set list
Run Code Online (Sandbox Code Playgroud)

rom*_*inl 25

如果你使用这些选项,你~/.vimrc肯定已经阅读了:help 'list',:help 'listchars'但是从你的问题来看,你是否发现最后两行并不是很清楚:help 'listchars':

The "NonText" highlighting will be used for "eol", "extends" and
"precedes".  "SpecialKey" for "nbsp", "tab" and "trail".
Run Code Online (Sandbox Code Playgroud)

但是,选项卡和尾随空格使用相同的突出显示组,因此您无法为这些突出显示组提供不同的背景颜色.但是你不需要不同的颜色,因为你已经将它们设置为由不同的字符表示.


Ken*_*ent 7

这是一种方式:

首先创建两个hi-groups:

:hi GroupA ctermbg=blue ctermfg=.. guibg=...
:hi GroupB ctermbg=gray ctermfg=.. guibg=..
Run Code Online (Sandbox Code Playgroud)

然后

:match GroupA / \+$/
:2match GroupB /\t/
Run Code Online (Sandbox Code Playgroud)

  • 这非常有效.要使所有空白变为深灰色:`:hi Whitespace ctermfg = DarkGray`和`:match Whitespace /\s /` (3认同)
  • 匹配所有空格,`:匹配ExtraWhitespace /\s\+ $ /`在这里工作得更好. (2认同)

Ing*_*kat 7

你不能,至少不是一个100%正确的简单方法.

正如@romainl所说,Vim只为表示字符的所有listchar类型提供了一个高亮组,即.SpecialKey.

@Kent的变通方法实现有几个缺点:

  • 它仅适用于第一个/当前窗口; 你也需要:autocmd为新窗口定义它.
  • 它不考虑是否'list'实际设置; 挂钩它的变化是不可能的.
  • 它破坏了:match插槽; 这可以通过防止matchadd(),但它的使用更复杂.

因此,请仔细思考该功能是否真的值得.