Определить, находится ли буфер в неактивном окне в строке состояния - PullRequest
0 голосов
/ 13 января 2020

My vimr c устанавливает номер буфера в строке состояния с другим цветным фоном на основе того, является ли он доступным только для чтения или изменен.

Я также хотел бы установить другой цвет, если буфер не находится в активное окно (полезно в режиме разделенного окна).

Я использую &mod и &readonly для обнаружения измененных или только для чтения. Как я могу проверить, находится ли буфер в активном окне? (то есть, возможно, измените его на серый, если окно неактивно).

Вот код, который я использую для чтения и измененный:

function! StatusLineHeader()
    return '  '.bufnr('%').' '
endfunction

set statusline=
set statusline+=%#UWhiteOnBlue#%{&mod?'':&readonly?'':StatusLineHeader()} "default header
set statusline+=%#UWhiteOnOrange#%{&mod?'':&readonly?StatusLineHeader():''} "readonly header
set statusline+=%#UWhiteOnGreen#%{&mod?StatusLineHeader():''} "modified header

1 Ответ

0 голосов
/ 13 января 2020

Прежде всего, вообще плохая идея использовать слишком много цветов в строке состояния. Вам действительно лучше перейти к предопределенным значениям StatusLine / StatusLineNC / %*, которые устанавливаются автоматически, т.е.

set statusline+=%*%{StatusLineHeader()} "default header

Но если вы действительно этого хотите, вам нужно :h g:actual_curwin. Таким образом, это становится:

set statusline+=%#StatusLine#%{g:actual_curwin==win_getid()?StatusLineHeader():''}
set statusline+=%#StatusLineNC#%{g:actual_curwin!=win_getid()?StatusLineHeader():''}

Примечание: g:actual_curwin был добавлен в Vim 8.1.1372

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...