Я бы решил это, используя временную глобальную переменную. Вот простая функция, которая возвращает значение переменной 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
в строке состояния).
EDIT
Конечно, было бы намного проще отобразить сообщение, повторив его и очистив дисплей после этого, например так:
...
redraw!
echo "I am calling a slow external command"
call SlowExternalCommand()
redraw!
...
Таким образом, сообщение будет отображаться в командной строке Vim, а не в строке состояния. Вам не нужна ни одна из функций, определенных выше.