执行命令时更改vim状态行

时间:2012-03-20 14:03:05

标签: unix vim

我想更改vim忙于执行外部命令时显示的vim状态行。 我有一个vim脚本,使用“!”将来自vim的文本行管理到一些外部程序中。执行后,vim等待命令输出用它替换行。在等待的时候,我想在状态行中显示外部命令的状态。 这可能吗?

1 个答案:

答案 0 :(得分:1)

我会使用临时全局变量来解决这个问题。这是一个简单的函数,如果它存在,则返回变量g:temp_var的值,否则返回一个空字符串:

function! TemporaryStatus()
    if exists("g:temp_var")
        return g:temp_var
    else
        return ""
    endif
endfunction

您可以将状态行设置为使用此函数的返回值,如下所示:

set statusline=%!TemporaryStatus()

然后,当您调用慢速外部命令时,只需预先设置临时变量(使用您想要显示的消息),然后再unlet。例如:

...
let g:temp_var = "I am calling a slow external command"
redraw!
call SlowExternalCommand()
unlet g:temp_var
redraw!
...

请注意,redraw!命令是确保Vim更新显示所必需的(因此在状态行中使用g:temp_var的更新值。)

修改

当然,通过回显并随后清除显示来显示消息会更简单,如下所示:

...
redraw!
echo "I am calling a slow external command"
call SlowExternalCommand()
redraw!
...

这样,消息将显示在Vim命令行上,而不是显示在状态行中。您不需要上面定义的任何功能。