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
Odpowiedz
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
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
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 &
:! 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
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ę).
:! 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
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ć.
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.
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
Zapomniałem, że okno poleceń nic nie pokazuje. Zmodyfikowałem odpowiedź, aby podać potencjalne rozwiązanie. – idbrii
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
zobaczyć this script
Ten skrypt nie nadaje się do użytku w systemie Windows. – vexe
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. –
Wystarczy popatrzeć na użytkownika @ tpope dispatch.vim Trailer
https://github.com/tpope/vim-dispatch#readme
wideo: http://vimeo.com/63116209
nie u znaleźć dobre rozwiązanie dla tego –
@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