在 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()
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()
:timer
尚未实现(但已列入待办事项清单)。您想选择一个事件吗? - johnsyweb