延迟后Vim在状态行中显示

时间:2011-06-02 09:28:40

标签: vim delay statusline

是否可以在给定事件之后如此长时间更新Vim中的状态行?

如果是这样,那怎么做呢?

1 个答案:

答案 0 :(得分:32)

正如其他人已经指出的那样,目前不可能使用状态线的定时更改。但是,如果您可以选择状态恢复为默认值的合适事件,那么您可能会很幸运。例如,如果您的工作流程是:

  1. Esc退出正常模式并拨打您的快捷方式
  2. 查看状态行的结果并返回插入模式以继续工作
  3. 然后,您可以在自动命令中使用InsertEnter事件,在正常模式下按 i 后将状态更改为默认值。

    这是一个很有趣的例子,您可以根据自己的需要进行修改。

    正常状态行:

    enter image description here

    "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:

    enter image description here

    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>
    

    根据上述定义,每次按 Ctrl m 时,状态行都会更改为上面的内容。

    现在,通过设置自动命令,只要您进入插入模式,我们就可以将其恢复为默认值。

    autocmd InsertEnter * set statusline=%!DefaultStatus()
    

    返回插入:

    enter image description here