Identyczną funkcjonalność w naszym edytorze otrzymamy za pomocą komendy make. Chodzi mi tutaj o polecenie w Vimie, a nie o program o tej samej nazwie. Polecenie to uruchamia program ustawiony pod zmienną makeprg i parsuje komunikaty, które ten program wyrzuca na ekran. Domyślnie pod makeprg ustawiony jest program make ale możemy to zmienić w bardzo prosty sposób:
:set makeprg=g++
Zamiast g++ możemy wpisać dowolną nazwę programu.
No dobrze, czyli polecenie make uruchamia zewnętrzny program, parsuje jego komunikaty ale skąd ma wiedzieć co one oznaczają? Otóż porównuje je z wzorcem zapisanym w zmiennej errorformat. Wzorce zapisane są w odpowiednim formacie, o którym można dokładnie poczytać w :help errorformat. Ja ograniczę się tylko do pokazania przykładu, który z resztą był mi bardzo pomocny.
Domyślnie w tej zmiennej zapisane są wzorce komunikatów programu make ale jedynie tych angielskich. Jako, że ja mam ustawiony język polski w systemie to make również komunikuję się ze mną po polsku. I w tym momencie na domyślnych ustawieniach Vim sobie nie radzi. Dopisałem więc do errorformat dodatkowe reguły:
%Dmake[%*\\d]:\ Wejście\ do\ katalogu\ `%f',%Xmake[%*\\d]:\ Opuszczenie\ katalogu\ `%f',%D%*\\a:\ Wejście\ do\ katalogu\ `%f',%X%*\\a:\ Opuszczenie\ katalogu\ `%f'
Po krótce omówię symbole, których tu użyłem:
- Pierwsza linia (tzn. do przecinka) mówi o tym, że make zmienia katalog, w którym kompiluje pliki. Jest to bardzo ważne, ponieważ Vim sobie zapamiętuje, w których katalogach są one kompilowane. Przydaje się to w momencie, w którym jesteśmy aktualnie w katalogu A i błąd wyskoczył w pliku, który znajduje się w zupełnie innym katalogu. Bez tej opcji nie moglibyśmy od razu do niego przeskoczyć.
Dokładniej mówiąc %D oznacza, że Vim ma się spodziewać zmiany katalogu. Wraz z %D musi wystąpić %f w tej samej linii. %f określa miejsce, w którym pojawi się nowy katalog.
Cała linijka mówi tyle, że gdy napotkasz wyrażenie make[jakakolwiek_liczba]: Wejście do katalogu `ścieżka' to wiedz, że zostały zmieniony aktualny katalog na ten w ścieżce. - Druga linijka jest analogiczna. %X oznacza opuszczenie katalogu i tak samo z %X w parze musi wystąpić %f.
- Dwa ostatnie wzorce mówią dokładnie to samo, z tą tylko różnicą, że zamiast spodziewać się make[jakakolwiek_liczba] Vim może spodziewać się jakiegokolwiek ciągu liter i/lub liczb.
Kolejny upierdliwy problem (tym razem związany z programem make) polega na tym, że nie zawsze jesteśmy akurat w katalogu, który zawiera plik Makefile. I co wtedy? Wykonanie polecenia :make zakończy się komunikatem, że nie znaleziono pliku Makefile. Na szczęście program make posiada opcję -C która określa katalog, w którym znajduje się ten plik. Vim jest na tyle sprytny, że pozwala nam na przekazanie dowolnych parametrów do wykonywanego programu. Dla przykładu będąc w katalogu A i wiedząc, że plik Makefile znajduje się w katalogu wyżej możemy po prostu wywołać :make -C ..
Można sprawę jeszcze bardziej uprościć pisząc funkcję w Vimie, która sprawdzi gdzie jest plik Makefile i automatycznie uruchomi program make z odpowiednią opcją. Ale o tym może innym razem. Dodam jeszcze tylko, że listę błędów i ostrzeżeń po wykonaniu :make możemy wyświetlić za pomocą :copen i najeżdżając kursorem na odpowiednią linię oraz wciskając enter przejdziemy automatycznie do odpowiedniej linii w danym pliku.
To tyle na dziś. Miłego kodowania!
Brak komentarzy:
Prześlij komentarz