Я использую gVim в окнах для редактирования моего кода (в основном С++). Я использую: make в gVim для компиляции проекта, но это операция блокировки, которая мешает мне использовать gVim до завершения компиляции. Как я могу сделать: сделать асинхронно и по-прежнему получать преимущества от чтения ошибок обратно в Vim и перейти к ошибкам в исходном коде? Бонусные очки, если я увижу процесс make в режиме реального времени. Прямо сейчас: make перенаправляет вывод в файл, поэтому я не вижу прогресса в make.
Запуск: сделать из gVim в фоновом режиме
Ответ 1
Что я делаю, это
:!gvim -c 'MyMake'
(где MyMake - это настраиваемая команда, которая может переключиться на соответствующий каталог, make и copen 20.)
и я выполняю свою работу, а сборка идет в другом окне.
Другой вариант:
Вы можете перенаправить прогресс в некоторый файл из оболочки или внутри vim (:! Make &). И затем, используя
:cfile make_result_file
:cw
or
:copen 20
Достигните того же результата, что и вы: make
Ответ 2
Посмотрите на @tpope dispatch.vim
https://github.com/tpope/vim-dispatch#readme
Видео трейлер: http://vimeo.com/63116209
Ответ 3
Посмотрите на мой плагин AsyncCommand. Он просто обертывает синтаксис vim, необходимый для выполнения чего-либо, и загружает его с помощью --remote. Я загрузил AsyncCommand 2.0, который включает в себя команду AsyncMake
.
Добавьте script к вашему .vim/plugin
, и вы можете построить с помощью :AsyncMake
или :AsyncMake target
. Ошибки будут открываться в вашем quickfix после завершения 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, "")
Это должно изменить все команды Async, чтобы открыть второе командное окно с выходом.
Ответ 4
Попробуйте использовать
:!start make
(подробнее об этом: "help! start" ) - таким образом, vim не должен ждать завершения процесса - вы можете просто продолжать редактирование).
Ответ 5
Я бы использовал встроенные методы вашей ОС для выполнения фоновых задач.
В окнах попробуйте ввести
:!start make
В linux/mac os x попробуйте
:!make > /dev/null 2>&1 &
Ответ 6
Вы не сможете увидеть прогресс make (внутри Vim), если вы не установите очень последнюю версию Vim (v7.4 и многие исправления, или просто Vim 8). Теперь есть несколько плагинов, которые воспользовались им. Мой BuildToolsWrapper является одним из них. Я успешно протестировал его на Linux и на окнах.
До этого нам нужны были другие трюки. Я помню плагин Marc Weber, который смог подражать фоновой компиляции в Windows. Было еще несколько человек. Я позволил другим перечислить их.
Ответ 7
см. этот script