Running: make Z gVim w tle

Używam gVim w windows do edycji kodu (głównie C++). Używam :make w gVim do kompilacji projektu, ale jest to operacja blokująca, która uniemożliwia mi Korzystanie z gVim aż do zakończenia kompilacji. Jak mogę to zrobić: zrobić asynchronicznie i nadal uzyskać korzyści z odczytu błędów z powrotem do Vima i przejść do błędów w kodzie źródłowym? Punkty bonusowe, jeśli Mogę zobaczyć proces tworzenia w czasie rzeczywistym. W tej chwili: make przekierowuje wyjście do pliku, stąd nie widzę postępu make.

Author: Amjith, 2009-03-20

7 answers

What I do is

:!gvim -c 'MyMake'

( Gdzie MyMake jest niestandardowym poleceniem, które może przełączyć się na odpowiedni katalog dir, make i copen 20. )

A ja wykonuję swoją pracę, podczas gdy build wchodzi do drugiego okna.

Inne opcje:
Możesz przekierować postęp do jakiegoś pliku z powłoki lub w vim (:!make&). A następnie za pomocą

:cfile make_result_file

:cw
 or
:copen 20 

Osiągnij ten sam wynik, jaki byś użył: make

 18
Author: Mykola Golubyev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-20 15:00:38

Zajrzyj do dyspozytorni @tpope.vim

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

Zwiastun filmu: http://vimeo.com/63116209

 8
Author: noahlz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-02 14:55:45

Spójrz na mój asynccommand plugin. To tylko zawija składnię Vima wymaganą do wykonania czegoś i ładuje ją za pomocą --remote. Wgrałem AsyncCommand 2.0, który zawiera polecenie AsyncMake.

Dodaj skrypt do swojego .vim/plugin i możesz budować za pomocą :AsyncMake lub :AsyncMake target. Błędy zostaną otwarte w quickfix po zakończeniu make.


Odpowiadając na komentarz w celu uzyskania bardziej czytelnego kodu:

Aby zobaczyć wyniki kompilacji w systemie Windows, jeśli masz cygwin/unxutils / coś z ogonem na twojej ścieżce, a następnie w asynchronicznym poleceniu.vim, change

call <SID>Async_Impl(tool_cmd, vim_cmd)

Do

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

To powinno zmienić wszystkie polecenia asynchroniczne, aby otworzyć drugie okno poleceń z wyjściem.

 7
Author: idbrii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-24 22:30:05

Spróbuj użyć

:!start make

(więcej informacji na temat ":pomocy !start") - w ten sposób vim nie musi czekać na zakończenie procesu-możesz po prostu kontynuować edycję).

 5
Author: Rook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-20 15:14:05

Użyłbym wbudowanych metod systemu operacyjnego do uruchamiania zadań w tle.

W systemie windows spróbuj wpisać

:!start make

Na Linuksie / mac os X spróbuj

:!make > /dev/null 2>&1 &
 1
Author: gar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-20 15:11:26

Nie będziesz mógł zobaczyć postępu tworzenia (w Vimie), chyba że zainstalujesz najnowszą wersję Vima (v7.4 i wiele łatek, lub po prostu Vim 8). Teraz jest kilka wtyczek, które z tego skorzystały. Mój BuildToolsWrapper jest jednym z nich. Przetestowałem go z powodzeniem na Linuksie i windows.

Wcześniej potrzebowaliśmy innych sztuczek. Pamiętam wtyczkę marca Webera, która była w stanie emulować kompilację tła w systemie Windows. Było kilka innych. I let others list oni.

 1
Author: Luc Hermitte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-21 07:29:20
 -1
Author: Kyle Simek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-17 18:02:38