2009-03-20 5 views
34

Używam gVim w oknach do edycji mojego kodu (głównie C++). Używam: make in gVim, aby skompilować projekt, ale jest to operacja blokowania, która uniemożliwia mi używanie gVim do zakończenia kompilacji. Jak mogę to zrobić: zrobić asynchronicznie i nadal korzystać z możliwości odczytywania błędów z powrotem w Vimie i przejść do błędów w kodzie źródłowym? Dodatkowe punkty, jeśli zobaczę proces tworzenia w czasie rzeczywistym. Teraz: przekierowuje wyjście do pliku, więc nie widzę postępu make.Uruchamianie: tworzenie z gVim w tle

+0

nie u znaleźć dobre rozwiązanie dla tego –

+0

@pydave stworzył plugin o nazwie AsyncCommand, która osiąga większość elementów wymienionych w pytaniu, z wyjątkiem wyświetlania procesu make w akcji. – Amjith

Odpowiedz

18

Co mogę zrobić, to

:!gvim -c 'MyMake' 

(gdzie MyMake jest polecenie niestandardowe, które mogą przejść do odpowiedniego katalogu, marka, i COPEN 20.)

i robię moją pracę podczas kompilacji idzie inne okno.

Inny wariant:
można przekierować dokonać postępu w jakimś pliku z powłoki lub w vim (: uczynić &). A następnie za pomocą

:cfile make_result_file 

:cw 
or 
:copen 20 

osiągnąć ten sam rezultat, jak można użyć: dokonywania

+0

Czy możesz rozwinąć komendę MyMake? Próbuję zrobić coś podobnego z gvim w oknach i msbuild (np. Uruchomić zewnętrzne okno gvim, make i open output), ale nie mogę poprawnie wykonać polecenia. – rem45acp

1

chciałbym użyć metody wbudowane system operacyjny dla uruchamiania zadań w tle.

Na oknach, spróbuj wpisać

:!start make 

na Linux/Mac OS X, spróbuj

:!make > /dev/null 2>&1 & 
+3

:! Start make działa dobrze, jeśli próbujesz odrodzić proces tworzenia. Szukam użyć funkcji budowania w gvim, gdzie odczytuje błędy w vim i można przejść do błędu w kodzie źródłowym, klikając go dwukrotnie. – Amjith

5

Spróbuj użyć

:!start make 

(więcej informacji na temat ": pomoc start!") - w ten sposób vim nie musi czekać, aż proces się zakończy - możesz po prostu kontynuować edycję).

+5

:! Start make działa dobrze, jeśli próbujesz odrodzić proces make. Szukam użyć funkcji budowania w gvim, gdzie odczytuje błędy w vim i można przejść do błędu w kodzie źródłowym, klikając go dwukrotnie. – Amjith

1

Nie będziesz w stanie zobaczyć postępów make (w Vimie), chyba że zainstalujesz najnowszą wersję Vima (v7.4 i wiele poprawek, lub po prostu Vim 8). Teraz jest kilka wtyczek, które go wykorzystały. Mój BuildToolsWrapper jest jednym z nich. Przetestowałem to z powodzeniem na Linuksie i na 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. Pozwalam innym je wymieniać.

7

Zapoznaj się z moją wtyczką AsyncCommand. Po prostu zawija składnię vim wymaganą do wykonania czegoś i załadowania go za pomocą --remote. Przesłałem AsyncCommand 2.0 z poleceniem AsyncMake.

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


Odpowiadając na komentarz do bardziej czytelnego kodu:

aby zobaczyć wyniki opierają się na systemie Windows, jeśli masz cygwin/unxutils/coś tail na swojej drodze, a następnie w asynccommand.vim zmień

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 Async, aby otworzyć drugie okno poleceń z danymi wyjściowymi.

+0

Hej, dziękuję za stworzenie tej wtyczki. Czy istnieje sposób, aby zobaczyć proces tworzenia w działaniu? Używam Win XP, a okno poleceń jest puste, dopóki proces tworzenia nie zostanie zakończony, wtedy otworzy się okno quickfix. – Amjith

+0

Zapomniałem, że okno poleceń nic nie pokazuje. Zmodyfikowałem odpowiedź, aby podać potencjalne rozwiązanie. – idbrii

+0

Dodałem linie wspomniane powyżej, ale nadal mam puste okno poleceń. Jestem w Window XP i mam na swojej drodze ogon. Zawarłem nawet pełną ścieżkę do polecenia ogon. – Amjith

-1

zobaczyć this script

+0

Ten skrypt nie nadaje się do użytku w systemie Windows. – vexe

+0

Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby lepiej] (// meta.stackoverflow.com/q/8259), aby dołączyć istotne części odpowiedzi tutaj, i podać link dla odniesienia. –