1
我想改变其被示出而VIM是忙于执行外部命令的VIM状态线。 我有一个vim脚本,管道从VIM文本行到使用一些外部程序“!”。在执行之后,vim等待命令的输出以用它替换这些行。在等待时,我想在状态行中显示外部命令的状态。 这可能吗?变化VIM状态线在执行命令
我想改变其被示出而VIM是忙于执行外部命令的VIM状态线。 我有一个vim脚本,管道从VIM文本行到使用一些外部程序“!”。在执行之后,vim等待命令的输出以用它替换这些行。在等待时,我想在状态行中显示外部命令的状态。 这可能吗?变化VIM状态线在执行命令
我将使用临时全局变量解决这个问题。这里是返回的,如果它存在的变量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命令行,而不是在状态行中。你不需要任何上面定义的函数。
我明白了。但我需要的是一个更新的状态行。例如。它应该显示缓慢外部命令的进度:5%10%15%(注意进度信息本身是由外部命令产生的,可以写入vim可以读取的管道或文件)。但关键问题是状态行是否允许在执行外部命令时进行更新。 – highsciguy 2012-03-20 16:30:20
你不能用'!'来做这个,恐怕。 '!'在系统调用期间暂停Vim。您可以尝试使用'!start'(请参阅':help:!start'),它声称不会暂停Vim - 但我从来没有使用它。如果有效,那么可以在命令运行时更新'g:temp_var'。 – 2012-03-20 16:37:02
但这可能意味着我不能在文件中插入命令的输出,我可以吗? – highsciguy 2012-03-20 21:34:51