在给定事件发生后这么长时间,是否有可能在Vim中更新状态行?
如果是这样,那该怎么做?
最佳答案
正如其他人已经指出的那样,目前无法对状态栏进行定时更改。但是,如果您可以选择一个合适的事件将状态恢复为默认事件,那么您可能会很幸运。例如,如果您的工作流程是:
Esc
输出到普通模式,并调用快捷方式那么您可以在自动命令中使用
InsertEnter
事件,以在正常模式下按i后将状态更改为默认状态。这是一个有趣的小示例,您可以根据需要进行修改。
正常状态行:
"statusline
hi green term=bold cterm=bold ctermfg=107
hi red term=bold cterm=bold ctermfg=167
hi gray term=bold cterm=bold ctermfg=0
hi lblue term=bold cterm=bold ctermfg=12
function! Palpatine()
let str='At last, the Jedi are no more'
return str
endfunction
function! Force()
let str=',~`,~`,~`,~`,~`,~`,~`,~'
return str
endfunction
function! DefaultStatus()
let statusStr='%#red#Palpatine: %#gray#%{Palpatine()} %#lblue#%{Force()} %=%#green#Yoda'
return statusStr
endfunction
set laststatus=2
set statusline=%!DefaultStatus()
在函数调用上的Statuschange:
function! Yoda()
let str='Not if anything to say about it, I have'
return str
endfunction
function! MyStatus()
let statusStr='%#red#Palpatine %=%#lblue#%{Force()} %#gray#%{Yoda()} %#green#:Yoda'
return statusStr
endfunction
function! MyFunc()
set statusline=%!MyStatus()
endfunction
noremap <C-m> :call MyFunc()<CR>
有了以上定义,每当我按Ctrlm时,状态行就会变为上面的状态。
现在,通过设置自动命令,我们可以在您进入插入模式时将其恢复为默认值。
autocmd InsertEnter * set statusline=%!DefaultStatus()
返回插入:
关于延迟后Vim在状态栏中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212687/