在 Vim 中,当我处于命令行模式时如何更改 StatusLine 的颜色?

In Vim, how can I change the color of the StatusLine when I'm in Command Line mode?

我正在使用 Vim 8.2。当我使用 /:.

进入命令行模式时,我想更改 StatusLine 的颜色

我的 .vimrc 中有以下内容。它应该改变当前 window 和非当前 windows

StatusLine 的背景和前景色
augroup InsertHook
  autocmd!
  " enter command line mode
  autocmd CmdlineEnter * hi StatusLine   gui=bold guifg=#7386A7 guibg=#FFE847
  autocmd CmdlineEnter * hi StatusLineNC gui=NONE guifg=#FFE847 guibg=#9EA8BA

  " leave command line mode
  autocmd CmdlineLeave * hi StatusLine   gui=bold guifg=#EFEEC9 guibg=#7386A7
  autocmd CmdlineLeave * hi StatusLineNC gui=NONE guifg=#DFDBC5 guibg=#9EA8BA
augroup END

这有点管用,但只有当我使用 / 进入命令行模式,然后输入一些内容时。当我使用 :.

进入命令行模式时它不起作用

我试过上面的代码片段,分别用 CmdwinEnterCmdwinLeave 代替 CmdlineEnterCmdlineLeave;我也尝试过 CmdlineChanged,但是在使用 :/.[=27= 进入命令行模式时,我无法让 StatusLine 的颜色立即改变]

有什么想法吗?

不幸的是,控制状态行的突出显示并不是那么简单。

这是一个 hack,当您 enter/leave 命令行时,它会更改 每个 window 的状态行突出显示:

hi CmdlineEnter ctermbg=green ctermfg=white
hi CmdlineLeave ctermbg=blue ctermfg=white
augroup cmd
    autocmd!
    autocmd CmdlineEnter * let &statusline = '%#CmdlineEnter#%f'
    autocmd CmdlineLeave * let &statusline = '%#CmdlineLeave#%f'
augroup END

不过,我不确定如何更改它,使其仅突出显示当前 window 的状态行。