изменить строку состояния vim при выполнении команды - PullRequest
2 голосов
/ 20 марта 2012

Я хотел бы изменить строку состояния vim, которая отображается, когда vim занят выполнением внешней команды. У меня есть скрипт vim, который передает строки текста из vim во внешнюю программу, используя "!". После выполнения vim ожидает вывода команды для замены строк. Пока он находится в ожидании, я хотел бы показать статус внешней команды в строке состояния. Возможно ли это?

1 Ответ

1 голос
/ 20 марта 2012

Я бы решил это, используя временную глобальную переменную. Вот простая функция, которая возвращает значение переменной 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, а не в строке состояния. Вам не нужна ни одна из функций, определенных выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...