Запуск: сделать из gVim в фоновом режиме - PullRequest
34 голосов
/ 20 марта 2009

Я использую gVim в Windows для редактирования своего кода (в основном C ++). Я использую: make в gVim для компиляции проекта, но это блокирующая операция, которая не позволяет мне использовать gVim до завершения компиляции. Как я могу это сделать: сделать асинхронно и при этом получить выгоду от чтения ошибок обратно в Vim и перехода к ошибкам в исходном коде? Бонусные баллы, если я смогу увидеть процесс изготовления в реальном времени. Прямо сейчас: make перенаправляет вывод в файл, поэтому я не вижу прогресса make.

Ответы [ 7 ]

18 голосов
/ 20 марта 2009

Что я делаю, это

:!gvim -c 'MyMake'

(где MyMake - это пользовательская команда, которая может переключаться на соответствующий dir, make и copen 20.)

и я делаю свою работу, пока сборка идет в другом окне.

Другой вариант:
Вы можете перенаправить прогресс выполнения в какой-либо файл из оболочки или из vim (:! Make &). А затем с помощью

:cfile make_result_file

:cw
 or
:copen 20 

Достигните того же результата, что и вы: make

8 голосов
/ 02 апреля 2013

Посмотрите на отправку @ tpope.vim

https://github.com/tpope/vim-dispatch#readme

Видео Трейлер: http://vimeo.com/63116209

7 голосов
/ 23 февраля 2011

Взгляните на мой AsyncCommand плагин. Он просто оборачивает синтаксис vim, необходимый для выполнения чего-либо и загрузки его с помощью --remote. Я загрузил AsyncCommand 2.0, который включает команду AsyncMake.

Добавьте скрипт к вашему .vim/plugin, и вы можете построить с :AsyncMake или :AsyncMake target. Ошибки будут открыты в вашем быстром исправлении после завершения make.


Ответ на комментарий для более читабельного кода:

Чтобы увидеть результаты сборки в Windows, если у вас есть cygwin / unxutils / что-то с tail на вашем пути, затем в asynccommand.vim измените

call <SID>Async_Impl(tool_cmd, vim_cmd)

до

call <SID>Async_Impl(tool_cmd, vim_cmd)
call <SID>Async_Impl("tail -f ". temp_file, "")

Это должно изменить все асинхронные команды, чтобы открыть второе командное окно с выводом.

5 голосов
/ 20 марта 2009

Попробуйте использовать

:!start make

(более подробная информация о ": help! Start") - таким образом, vim не нужно ждать окончания процесса - вы можете просто продолжить редактирование).

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

Вы не сможете увидеть ход выполнения make (внутри Vim), если не установите самую последнюю версию Vim (v7.4 и множество исправлений или просто Vim 8). Теперь есть несколько плагинов, которые воспользовались этим. Мой BuildToolsWrapper является одним из них. Я успешно проверил его на Linux и Windows.

До этого нам нужны были другие хитрости. Я помню плагин Марка Вебера, который мог эмулировать фоновую компиляцию в Windows. Было несколько других. Я позволил другим перечислить их.

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

Я бы использовал встроенные методы вашей ОС для запуска фоновых задач.

В Windows попробуйте набрать

:!start make

В Linux / Mac OS X, попробуйте

:!make > /dev/null 2>&1 &
0 голосов
/ 17 сентября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...