Vim延迟后在状态栏中显示

9

在 Vim 中,是否有可能在给定事件之后更新状态行?

如果可以,如何实现?


1
你能提供更多的信息吗?比如你正在尝试解决哪个问题? - johnsyweb
@Hermann:那么您希望状态栏何时恢复为其默认设置?例如,当您写入缓冲区时?哪个事件? - johnsyweb
我希望在3秒后,它能恢复到默认设置。所以这不是一个事件。 - john-jones
2
很遗憾,:timer尚未实现(但已列入待办事项清单)。您想选择一个事件吗? - johnsyweb
你的意思是选择一个事件? - john-jones
显示剩余2条评论
1个回答

33

正如其他人已经指出的那样,目前无法使用定时更改状态栏。但是,如果您可以选择一个合适的事件,在该事件中状态返回默认值,则您可能会有好运。例如,如果您的工作流程如下:

  1. Esc 退出到正常模式并调用快捷键
  2. 在状态栏上查看结果,并返回插入模式继续工作

则您可以在自动命令中使用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()

在函数调用时改变状态:

在这里输入图片描述

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()

回到插入操作:

输入图像描述


11
你因在vim状态栏中重现《星球大战》而得到了+1的评价!但是,在这个系列中的所有行中,你选择的是《西斯复仇》? - user564376

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接