首页 > 解决方案 > 检测缓冲区是否在状态行的非活动窗口中

问题描述

我的 vimrc 根据它是只读的还是修改的,将状态行中的缓冲区编号设置为不同的颜色背景。

如果缓冲区不在活动窗口中,我还想设置不同的颜色(在拆分窗口模式下很有用)。

我正在使用&modand&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

标签: vimstatusline

解决方案


首先,通常在状态行中使用太多颜色是个坏主意。你真的最好下降到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 中添加


推荐阅读