Как правильно запустить бесконечный цикл и по-прежнему работать с буферами в плагине VIM?

Я пишу плагин VIM в Python. Я хотел бы иметь возможность запускать функцию, которая будет ожидать события в фоновом режиме и обновлять буфер при необходимости, не замораживая все окно. Это возможно?

Я попытался запустить отдельный поток, используя threading модуль, который не помог. Изменения в буфере отражаются только тогда, когда функция возвращается (и поток блокировки завершается).

Уточнение: у меня есть функция, которая может занять десятки секунд, чтобы вернуть обновления. Мне нужно обновить один из буферов с возвращенными данными (и снова вызвать функцию).

Как я могу назвать это "асинхронно" и не заморозить окно? Если я могу сделать это, охватывая отдельный процесс, как мне настроить IPC?

Еще одно обновление: что если я создаю временный файл, запишу в него отдельный процесс и наблюдаю за FileChangedShell как предложено здесь для автоматического обновления?

(Если в моей голове нет ответа "это не сработает" и нет лучших идей, я попробую это через некоторое время и обновлю результаты).

1 ответ

Это может быть абстрактно, не зная деталей. Но подойдет ли опрос данных о событии для вашего плагина? В далеком прошлом я писал некоторый плагин vim для ensime (демона scala Competletion), и у меня была похожая проблема. Для меня открытие нового процесса и ожидание данных в сокете работало довольно хорошо. Это, очевидно, было связано с тем, что сам сервер был асинхронным и использовался для записи результатов в сокет в порядке их получения. Надеюсь это поможет.

Другие вопросы по тегам