vim - 检测缓冲区是否在状态行的非活动窗口中
问题描述
我的 vimrc 根据它是只读的还是修改的,将状态行中的缓冲区编号设置为不同的颜色背景。
如果缓冲区不在活动窗口中,我还想设置不同的颜色(在拆分窗口模式下很有用)。
我正在使用&mod
and&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
解决方案
首先,通常在状态行中使用太多颜色是个坏主意。你真的最好下降到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 中添加
推荐阅读
- powerbi - 如果当前行值与power bi中的前一行值匹配,如何找到当前行值?
- java - 请求中的 GAE 错误代码 104 中断了所有并发请求
- scala - 在 Spark 数据框中过滤多列的最佳方法是什么?
- symfony - 无法在其他环境中加载灯具
- reactjs - 在 reactjs 的每个组件中重用 useEffect 代码
- c++ - 代码在 CodeSignal 中工作不正确。不确定这是否是我的代码缺陷
- angular - 如何正确使用带有 Angular 的引导轮播
- vue.js - 在故事书中使用 vuetify vue 需要一个合适的加载器
- javascript - 计算用户位置和 geoJSON 多边形传单之间的距离
- c++ - 是否不能在 Windows 95 和 Windows NT 4.0 中运行已编译的 C++ 应用程序?