延迟后Vim在状态行中显示

Her*_*son 8 vim delay statusline

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

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

abc*_*bcd 32

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

  1. Esc 退出正常模式并调用快捷方式
  2. 查看状态行上的结果并返回插入模式以继续工作

然后,您可以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()
Run Code Online (Sandbox Code Playgroud)

函数调用的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>
Run Code Online (Sandbox Code Playgroud)

根据上述定义,每次按下时Ctrlm,状态行都会更改为上述内容.

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

autocmd InsertEnter * set statusline=%!DefaultStatus()
Run Code Online (Sandbox Code Playgroud)

返回插入:

在此输入图像描述

  • 你只需要在你的vim状态栏中重演星球大战就获得+1!但是在系列中的所有线条之后,你选择了_Sven的西部_ ???? (11认同)
  • 令人印象深刻.印象最深刻. (5认同)