延迟后Vim在状态栏中显示

标签 vim delay statusline

在给定事件发生后这么长时间,是否有可能在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/

    相关文章:

    javascript - CSS,jQuery - 延迟失去最小高度的焦点

    vim - 我可以在 vim 中给快速修复窗口一个不同的状态行吗?

    vim - E185 : Cannot find color scheme*

    node.js - 使用 vim 和 CoffeeScript 的 Node 检查器

    javascript - 淡入jquery div显示

    Flutter 音频播放器延迟

    php - 无法让 XDebug 在 Vim 中建立连接。获取 "no attribue ' 停止'"错误

    vim - 无法在 vim 7.3.35 中更改语言

    vim - 如何合并vim命令行和状态行