Я бы хотел запустить скрипт peice of vim в фоновом режиме (желательно для windows, хотя, если он работает только на * nix, это тоже нормально)

Идея будет следующая:

  • Пользователь вызывает функцию vimscript (возможно, с помощью сочетания клавиш)
  • Обновления строки состояния, чтобы сообщить, что процесс запущен
  • Запускается фоновый скрипт (bash или windows batchfile) - я могу продолжить работу
  • Некоторое время спустя (скажем, несколько секунд) - сценарий завершается и строка состояния обновляется.

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

Это и Это говорит о том, что это невозможно, но я подумал, что я хотел бы спросить здесь.

1 ответ1

2

Асинхронный запуск Vimscript в одном и том же экземпляре Vim действительно невозможен, и вероятность того, что вы впервые увидите эту функцию в Neovim, намного выше.

Тем не менее, вы можете асинхронно выполнять внешние команды и передавать информацию в текущий экземпляр Vim.

  • Простым подходом будет опрос внешнего файла (который заполняется внешней командой с ее результатами). Это может быть сделано через autocmd CursorHold или из оценки 'statusline' (но не слишком часто, чтобы избежать перетаскивания редактирования).
  • Внешний сценарий также может "перезвонить" в исходный экземпляр Vim с помощью функции клиент-сервер (см. Help :help new-vim-server). Вам нужно будет передать v:servername в скрипт и затем перезвонить через vim --servername {name} --remove-expr . Примечание. В Unix для этой функции требуется X-сервер, поэтому при таком подходе вы можете ограничить применимость.
  • Плагин vim-misc реализует последний как оценку Vimscript во втором экземпляре Vim; это максимально приближает к асинхронной оценке Vimscript.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .