В Vim, как я могу изменить цвет строки состояния, когда я нахожусь в режиме командной строки?

#vim #macvim

#vim #маквим

Вопрос:

Я использую Vim 8.2. Я хотел бы изменить цвет StatusLine при входе в режим командной строки с / помощью и : .

У меня в моем есть следующее .vimrc . Предполагается, что он изменит цвета фона и переднего 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  

Это вроде как работает, но только когда я вхожу в режим командной строки с помощью a / , а затем что-то набираю. Это не работает, когда я вхожу в режим командной строки с a : .

Я поиграл с приведенным выше фрагментом кода, заменив CmdwinEnter и CmdwinLeave на CmdlineEnter и CmdlineLeave , соответственно; и я также пытался CmdlineChanged , но я не могу StatusLine мгновенно изменить цвет при входе в режим командной строки с обоими : и / .

Есть какие-нибудь идеи?

Ответ №1:

Управление подсветкой строки состояния, к сожалению, не так просто.

Вот хак, который изменяет подсветку строки состояния для каждого окна, когда вы входите/выходите из командной строки:

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

пример

Однако я не уверен, как его можно изменить, чтобы он выделял только строку состояния текущего окна.