VIM posiada niewyobrażalnie wielkie możliwości jeśli chodzi o wspomaganie programowania, niezależnie od języka. Poniżej opiszę po kolei co może VIM i jak to włączyć.
Artykuł ten dotyczy nowszych wersji VIMa – wszystkie ustawienia zaprezentowane tutaj zostały sprawdzone na wersji 6.1. W starszych wersjach część rzeczy może nie działać. Folding został wprowadzony w wersji 6.0.
Zakładam, że osoba czytająca ten tekst ma już jakiekolwiek pojęcie o pracy z VIMem. Jeśli nie – polecam tutorial do VIMa (należy uruchomić program vimtutor – tutorial jest przetłumaczony na język polski).
Pluginy
Wszystkie polecenia dotyczące PHP można wrzucić do .vimrc i przypisać je do rozszerzeń używanych przez PHP poleceniem au, ale łatwiej jest skorzystać z mechanizmu pluginów. Wystarczy w katalogu domowym stworzyć katalog .vim a w nim ftplugin i tam stworzyć plik o nazwie php.vim, który powinien zawierać wszystkie instrukcje które mają być wykonane przy otwieraniu pliku ze źródłami PHP. VIM przy otwieraniu pliku PHP automatycznie załaduje instrukcje z plików php.vim, php_cokolwiek.vim i wszystkie z podkatalogu php/ – oczywiście znajdujące się w katalogu .vim/ftplugin. Podobnie można robić dla wielu innych typów plików – opisy nazw tych typów znajdują się w pliku /usr/share/vim/vim{wersja}/filetype.vim
Wcinanie kodu
VIM automatycznie rozpoznaje elementy, po których kod powinien być wcięty – otwarcie nawiasów klamrowych, instrukcja warunkowa, pętla, niedomknięte cudzysłowy itp. Do ustawienia automatycznych wcięć służy kilka opcji (wszystkie oprócz ostatniej uaktywnia się przez :se nazwa_opcji):
- autoindent
- Po wciśnięciu Enter albo po zawinięciu linii (po dojściu do krawędzi zdefiniowanej w opcji textwidth) następna linia będzie się zaczynała w tym samym miejscu co poprzednia.
- smartindent
- Działa podobnie jak autoindent, ale automatycznie rozpoznaje elementy składniowe języka (można zdefiniować te elementy; standardowo obsługiwany jest język C) aby zmniejszyć lub zwiększyć wcięcie.
- cindent
- Włączenie tej opcji uaktywnia automatyczne wcinanie kodu dla języka C. PHP ma składnię prawie identyczną jak C, więc to ustawienie bardzo dobrze zadziała w tym przypadku. Wygląd kodu ułożonego przez tą funkcję można ustalić przez odpowiednie ustawienie opcji cinoptions – polecam dokumentację VIMa do
tej opcji (:he cinoptions i ogólnie :he C-indenting). - indentexpr
- Jest to najbardziej elastyczne ustawienie, ale wymaga napisania własnego kodu obsługi wcięć – jako parametr do tego ustawienia podaje się wyrażenie, które decyduje o wcięciu
Istnieje możliwość aby VIM automatycznie poukładał kod już napisany. Wystarczy w trybie Visual zaznaczyć odpowiedni fragment kodu i wcisnąć klawisz =. VIM automatycznie ułoży kod zgodnie z ustawieniami. Można także skorzystać z zewnętrznego programu – wystarczy wartość zmiennej opcji equalprog ustawić na nazwę programu, np.:
:se equalprog=indent
Ustawienia tabulacji
W większości przypadków programiści wolą używać 3 spacji zamiast znaku tabulacji przy wcinaniu kodu. Aby VIM tak wcinał kod należy ustawić następujące opcje:
:se expandtab :se shiftwidth=3 :se softtabstop=3
Pierwsza opcja wymusza używanie spacji zamiast tabulatora, druga określa ilość spacji używanych w każdy kroku wcięcia a trzecia ustala ile spacji jest uznawane za pojedynczy tabulator przy edycji – na przykład przy kasowaniu wcięcia klawiszem BackSpace
Podświetlanie składni
To jest podstawowa rzecz, której można wymagać od edytora wspomagającego pisanie programów. VIM automatycznie dobiera format podświetlania (aktualnie obsługuje ponad 300 formatów). Trzeba jedynie to podświetlanie włączyć. Najlepiej jest ustawić, aby podświetlanie składni włączało się przy
uruchomieniu VIMa – jeśli nie ma podświetlania dla danego formatu to nic się nie stanie, a jeśli jest, to przyjemnie jest odkryć, że na przykład VIM umie pokolorować plik konfiguracyjny do slrn’a. Tak więc do pliku .vimrc, znajdującego się w katalogu domowym użytkownika, należy dopisać linię:
:syntax on
VIM rozpoznaje kilka standardowych rozszerzeń, które przypisuje do PHP – php, php3, inc, phtml. Ale co jeśli chesz używać innego, niestandardowego rozszerzenia? Wystarczy powiedzieć VIMowi, że przy tworzeniu lub otwieraniu pliku z danym rozszerzeniem ma ustawić kolorowanie składni na PHPowe:
:au BufRead,BufNewFile *.php4 se filetype=php
Powyższa składnia (polecenie au – skrót od autocmd) przydaje się bardzo często do ustalania parametrów pracy zależnie od typu pliku, jednak w praktyce wystarczy ustalić w niej tylko typ pliku (w tym przypadku php) i skorzystać z mechanizmu pluginów opisanego wyżej – VIM zajmie się całą resztą,
czyli ustawi odpowiednie kolorowanie składni, odczyta pliki przeznaczone dla PHP itp.
Możliwe jest także uwzględnienie składni SQL i HTML w stringach zawartych w kodzie PHP. Aby to zrobić, należy ustawić zmienne kontrolne php_sql_query i php_htmlInStrings na 1. Czyli:
:let php_sql_query 1 :let php_htmlInStrings 1
Po takim przygotowaniu VIM będzie sam rozpoznawał w których stringach jest HTML a w których zapytanie SQL i będzie je odpowiednio kolorował.
Folding
Folding to tak zwane „zwijanie”. Polega to na tym, że VIM może tymczasowo ukryć pewien fragment kodu – na przykład zawartość definicji funkcji czy blok pętli. Aby włączyć folding trzeba ustawić zmienną php_folding na 1:
:let php_folding = 1
Po ustawieniu tej zmiennej automatycznie ustawione zostaną odpowiednie
parametry. Folding można wyłączyć później przez:
:se nofoldenable
Przydatnym parametrem jest foldlevel. Dzięki niemu można ustalić ile poziomów foldingu będzie zwinięte automatycznie przy otwarciu dokumentu – jeśli ten parametr będzie ustawiony na 0 wszystkie zwinięcia będą zamknięte.
Standardowy, wbudowany w plik składni PHP folding pozwala tylko na zwijanie definicji funkcji, klas oraz fragmentów między ?> a <?, czyli fragmentów kodu HTML. Przydaje się jednak, jeśli można zwinąć każdą parę nawiasów klamrowych. Aby to umożliwić, trzeba zmodyfikować plik php.vim znajdujący się w
katalogu /usr/share/vim/vim{wersja}/syntax/ (aby móc modyfikować ten plik konieczne są prawa administratora – jeśli ich nie masz, można te linijki poprostu dopisać do .vimrc, ale trzeba je podpiąć pod pliki PHP). Trzeba
znaleźć linię:
if exists("php_folding")
i przed linijką zawierającą słowo kluczowe else (u mnie linia 327) dopisać:
syn region phpFoldParent matchgroup=Delimiter start="{" end="}" transparent fold keepend syn sync fromstart
Trzeba także na końcu linii
syn cluster phpClTop contains=@phpClFunction,phpFoldFunction,phpFoldClass
dopisać ,phpFoldParent. Linia ta znajduje się wcześniej w tym pliku, u mnie jest to linia 294.
Standardowo zwinięcia otwiera się poleceniem zo a zamyka zc w trybie normal (bez : przed poleceniem). Można też otworzyć od razu wszystkie zwinięcia poleceniem zR. Otwieranie i zamykanie zwinięć można sobie ułatwić przez podmapowanie tych poleceń do odpowiedniej kombinacji klawiszy. Do pliku .vimrc można wpisać:
:map <C-o> zo :map <C-c> zc
Po wpisaniu takich poleceń zwinięcie można otwierać kombinacją Ctrl-o a zamykać Ctrl-c.
Tagi
VIM posiada wbudowany mechanizm odnośników, dzięki którym po wskazaniu kursorem nazwy użytej funkcji i wciśnięciu odpowiedniej kombinacji klawiszy można przejść do definicji tej funkcji.
Najpierw trzeba jednak stworzyć plik z informacją dla VIMa gdzie się te definicje znajdują. Służy do tego specjalny program ctags. Jest on dostępny w większości dystrybucji, a poza tym można go znaleźć pod adresem http://ctags.sourceforge.net/.
Obsługa tego programu jest bardzo prosta. Wystarczy w katalogu, w którym są pliki źródłowe, uruchomić ten program. Jeśli trzeba uwzględnić też podkatalogi – trzeba dodać parametr -R. Warto też zaznaczyć, że ctags nie przypisuje rozszerzenia .inc do PHP. Trzeba je dodać podając jako parametr uruchomienia ---langmap=php:+.inc.
Po wywołaniu programu ctags w katalogu w którym program został wywołany utworzony zostanie plik tags, który jest automatycznie odczytywany przez VIMa.
Po otworzeniu jakiegokolwiek z plików z danego katalogu można już używać wszystkich możliwości jakie oferują tagi. Trzeba jedynie pamiętać, żeby uruchamiać VIMa z katalogu w którym jest plik tags, w razie potrzeby podając ścieżki względne, lub już po uruchomieniu VIMa ustawić opcję tags tak, aby wskazywała na odpowiedni plik, np:
:se tags=../tags
Po 'najechaniu’ na użytą funkcję kursorem, aby przejść do jej definicji należy użyć kombinacji Ctrl-]. Jeśli definicja jest innym pliku to zostanie on otwarty, jeśli w tym samym – program przejdzie do odpowiedniej
linijki. Oczywiście można dalej chodzić po tagach. VIM zapamiętuję całą ścieżkę – można ją zobaczyć korzystając z polecenia :tags. Do poprzedniej lokalizacji można powrócić poleceniem :pop lub kombinacją klawiszy Ctrl-t.
Zachęcam do przeczytania pliku pomocy VIMa dotyczącego tagów (:he tags) – tam można znaleźć więcej informacji. Warto jest też przeczytać podręcznik do programu ctags (man ctags).
Dopełnianie nazw funkcji
VIM umożliwia automatyczne dopełnianie słów według kilku kryteriów:
- całych linii
- słów z bieżącego pliku
- słów ze słownika
- słów ze słownika synonimów
- słów z bieżącego pliku i plików dołączonych
- tagów
- nazw plików
- definicji i makr
- linii poleceń VIM
- słów z listy opisanej przez opcję complete
Wszystkie te metody są wywoływane z trybu insert, a konkretniej ze specjalnego pod-trybu, do którego wchodzi się kombinacją klawiszy Ctrl-X (w poniższych opisach Ctrl-X oznacza właśnie wejście do tego trybu – nie trzeba wciskać tej kombinacji 2 razy). Jeśli VIM znajdzie więcej niż jedno dokończenie
które pasuje do wpisanego początku, po propozycjach można przewijać kombinacjami Ctrl-N (następna) i Ctrl-P (poprzednia). Omówię teraz opcje dopełniania po kolei.
- całe linie
- VIM przeszukuje bieżący plik w poszukiwaniu linii, które zaczynają się tak samo jak bieżąca linia (wcięcia są ignorowane) i ewentualnie ją dopełnia. Funkcję tą wywołuje się kombinacją klawiszy Ctrl-X Ctrl-L
- bieżący plik
- aktualnie pisane słowo jest dopełnianie na podstawie tych słów, które już zostały do aktualnie edytowanego pliku – czyli bieżący plik jest traktowany jako słownik (tyle że nie ma wymogu, aby każde słowo było w osobnym wierszu). Tą funkcję wywołuje kombinacja Ctrl-X Ctrl-N
- słownik
- Korzystanie ze słownika bardzo ułatwia pracę – wystarczy stworzyć plik, w którym będą nazwy wszystkich funkcji PHP a VIM, po wpisaniu początku nazwy, sam dokończy resztę. Przygotowałem taki plik – można go znaleźć pod adresem http://www.leon.w-wa.pl/texts/phpfunclist. Trzeba jednak VIMa poinstruować gdzie ma szukać tego pliku. Służy do tego opcja dictionary. Można pod pliki PHP podpiąć taką instrukcję:
:se dictionary=~/phpfunclist
Przeszukiwanie słownika wywołuje Ctrl-X Ctrl-K. Plik phpfunclist to tylko nazwy funkcji – bez parametrów jakie przyjmują. Jednak jeśli ktoś bardzo potrzebuje prototypów funkcji, jest sposób żeby pojawiały się one przy dopełnianiu. Sprawa jest skomplikowana dlatego, że VIM używa tej samej opcji,
iskeyword, do ustalania które znaki nie należą do słów kluczowych dla wielu zadań – na przykład do dopełniania, kolorowania składni itp. Plik
http://www.leon.w-wa.pl/texts/phpproto zawiera prototypy, ale lekko poprawione – to znaczy nie ma żadnych spacji, zamiast spacji pomiędzy typem parametru a jego nazwą jest kropka itp. Plik ten jest taki a nie inny aby do minimum zmniejszyć ilość znaków które trzeba dodać do wspomnianej opcji aby
dopełnianie z prototypami działało. Teraz trzeba właśnie tą opcję odpowiednio poprawić::se iskeyword=@,40-41,44,46,91,93,48-57,_,192-255
Takie ustawienie spowoduje, że VIM będzie uważał nawiasy kwadratowe, okrągłe i kropki za część słowa kluczowego. Teraz wystarczy ustawić opcję dictionary tak, aby wskazywała na plik z prototypami i gotowe. Trzeba jednak pamiętać, że wszelkie modyfikacje iskeyword mogą prowadzić do
nieprawidłowego działania różnych opcji VIMa. - słownik synonimów
- Ta opcja jest już mniej przydatna, ale można ją wykorzystać. Działa ona podobnie jak poprzednia, lecz zamiast szukać słów, które zaczynają się tak samo jak już wpisany początek szuka tylko pierwszego takiego dopasowania a później przeskakuje po słowach z tej samej linii co to znalezione. Na przykład
można stworzyć sobie plik zawierający następującą treścią:postgres pg_connect pg_exec pg_num_rows string substr strpos strlen file fopen fclose fputs fgets
Trzeba podać ścieżkę do tego pliku ustawiając opcję thesaurus i teraz po napisaniu postgres i wciśnięciu kombinacji Ctrl-X Ctrl-T VIM będzie przewijał po funkcjach obsługi postgresa.
- bieżący plik i pliki dołączone
- VIM w poszukiwaniu słów kluczowych przeszukuje aktualnie edytowany oraz pliki dołączone przez dyrektyw dołączających inne pliki (w PHP to na przykład include, require). Rozpoznanie jaka instrukcja dołącza plik zależy od opcji include. Zawiera ona wyrażenie regularne, które określa string, który identyfikuje linię dołączającą plik. Standardowo działa ona prawidłowo dla C i C++. W przypadku PHP trzeba ją zmienić w następujący sposób:
:se include=(require|include)(_once)?
Oczywiście tą opcję także warto podpiąć pod rozszerzenia używane przez PHP, ponieważ tylko dla tego języka ustawienie to będzie miało sens.
Przeszukiwanie pliku z uwzględnieniem include jest inicjowane przez kombinację Ctrl-X Ctrl-I. - tagi
- To przeszukiwanie korzysta z tagów stworzonych przez program ctags. Jest to bardzo przydatne, ponieważ dopełnia nazwy funkcji i klas zdefiniowanych w danym projekcie. Ten typ dopełniania jest uruchamiany kombinacją Ctrl-X Ctrl-].
- nazwy plików
- Przydatne jeśli nie pamięta się nazwy pliku który trzeba podać jako parametr do wywołania funkcji. Dopełnianie nazw pliku wywołuje się kombinacją Ctrl-X Ctrl-F.
- definicje i makra
- Podobnie jak w przypadku dopełniania z przeszukiwaniem plików dołączonych, tu także zachowanie jest definiowane przez odpowiednią opcję aby definicje te można było wyciągnąć niezależnie od języka programowania. Domyślnie opcja define jest ustawiona tak, aby wyszukiwać definicje z kodów źródłowych języków C i C++ (format „#define _nazwa_ _wartość_”). Do współpracy z PHP
niezbędne jest takie ustawienie::se define=define
Dopełnianie zdefiniowanych stałych także szuka definicji w plikach dołączonych, więc także tutaj potrzebne jest prawidłowe ustawienie opcji include
Po takim ustawieniu kombinacja Ctrl-X Ctrl-D dokończy rozpoczętą nazwę zdefiniowanej stałej. - polecenia VIM
- Kombinacja Ctrl-X Ctrl-V dopełni nazwę polecenia VIM – tak jak w trybie wpisywania poleceń. Nie jest to zbyt przydatne przy programowaniu w PHP, ale jak opisywać wszystko to wszystko.
- słowa z listy opisanej przez opcję complete
- To jest połączenie wszystkich powyższych możliwości. Opcja complete określa zestaw słów, które będą używane do dopełniania. Opcja ta zawiera odseparowaną przecinkami listę, której elementami mogą być:
- . – szuka słów w bieżącym buforze
- w – szuka słów w innych oknach
- b – szuka w innych załadowanych buforach, które są na liście buforów
- u – szuka w niezaładowanych buforach, które są na liście buforów
- U – szuka w buforach, które nie są na liście buforów
- k – szuka w słowniku, który został określony w opcji dictionary
- k{słownik} – szuka w słowniku, którego nazwa została podana w tym parametrze; można podać kilka takich parametrów a także używać wzorców, np. :se complete=k/usr/dict/*,k~/.phpfunc
- s – szuka pliku w słowniku synonimów określonym w opcji thesaurus
- s{słownik} – szuka w słowniku synonimów, którego nazwa została podana w tym parametrze
- i – szuka w pliku bieżącym i dołączonych
- d – szuka definicji i makr w pliku bieżącym i dołączonych
- ] – szuka tagów
- t – to samo co ]
Jak widać jest to najuniwersalniejsza opcja – pozwala skorzystać z dowolnie wybranych źródeł słów kluczowych. Pozostaje tylko kwestia wyboru które zestawy słów są potrzebne. Ja zmienną complete ustawiłem tak:
:se complete=k,d,t
Słowa ze słownika (czyli funkcje wbudowane w PHP), stałe oraz tagi (funkcje i klasy zdefiniowane przeze mnie) całkowicie mi wystarczają.
Dopełnianie tego typu jest wywoływane przez kombinację Ctrl-N (jedyna opcja która nie jest wywoływana z pod-trybu Ctrl-X).
W dokumentacji do VIMa zamieszczony został ciekawy przykład – funkcja, która modyfikuje działanie klawisza Tab w taki sposób, że jeśli linia składa się z samych „białych znaków”, to wstawiany jest normalny znak tabulacji (albo spacje, zależnie od konfiguracji VIMa), a jeśli w danej linii są już jakieś inne znaki, to wywoływane jest dopełnianie z tego ostatniego trybu – połączonego. Wystarczy wpisać taki kod do .vimrc:
function! CleverTab() if strpart( getline('.'), 0, col('.')-1 ) =~ '^s*$' return "<Tab>" else return "<C-N>" endfunction inoremap <Tab> <C-R>=CleverTab()<CR>
Automatyczne przechodzenie do dokumentacji
Czasem, zwłaszcza w początkowym stadium nauki programowania w PHP, trzeba sięgać do podręcznika. VIM bardzo w tym pomaga. Wystarczy wskazać kursorem odpowiednie słowo kluczowe – nazwę funkcji – i wcisnąć klawisz K. Wtedy uruchomiony zostanie program określony w opcji keywordprg. Wystarczy
teraz napisać prosty skrypt, który będzie otwierał przeglądarkę tekstową na odpowiedniej stronie – napisałem taki prosty skrypt powłoki; można go znaleźć pod adresem
http://www.leon.w-wa.pl/texts/manual.sh. Wystarczy wyedytować ten plik aby ustawić odpowiednią ścieżkę do manuala (w tej wersji skryptu trzeba mieć podręcznik na dysku, ponieważ sprawdzane jest czy taka funkcja istnieje), przeglądarkę i ustawić w VIMie odpowiednio zmienną keywordprg na przykład tak:
:se keywordprg=/home/users/leon/manual.sh
VIM automatycznie przekazuje nazwę słowa kluczowego jako parametr tego programu.
Edycja wielu plików
Jak każdy porządny edytor, VIM umożliwia pracę z wieloma plikami na raz. Oprócz pracy z podziałem okien (które opisane są niżej) można przełączać się pomiędzy plikami edytowanymi w trybie pełnoekranowym.
Kilka buforów otwieranych jest automatycznie jeśli przy wywołaniu VIMa podany został więcej niż jeden plik. Aby otworzyć do edycji nowy plik już po uruchomieniu edytora, wystarczy wydać polecenie :bad _nazwa_pliku_ (bad to skrót od buffer add). Do przełączania się między nimi służą polecenia :bn (następny bufor) i :bp (poprzedni bufor). Można sobie ułatwić używanie tych poleceń przez zamapowanie ich pod jakąś kombinację, np. tak:
map <F2> :bn!<CR> imap <F2> <ESC>:bn!<CR> map <F3> :bp!<CR> imap <F3> <ESC>:bp!<CR>
Listę buforów wyświetla polecenie :ls
Warto zaznaczyć, że wszystkie bufory mają wspólny schowek, tak więc można kopiować fragmenty kodu między nimi.
Dzielenie okien
Bardzo przydatna rzecz przy pracy na kilku plikach, albo nawet jeśli trzeba pisać w jednym miejscu kodu podglądając jednocześnie inny fragment. VIM umie dzielić okna w poziomie i w pionie. Do podziału poziomego służy polecenie :split (lub kombinacja Ctrl-W s) a do pionowego :vsplit
(kombinacja Ctrl-W v). Jeśli polecenie to będzie wywołane bez żadnego parametru, otwarte okno będzie zawierało aktualnie edytowany plik. Można podać parametr, który będzie oznaczał nazwę pliku który będzie otwarty w nowo utworzonym oknie. Jeśli pomiędzy dwukropkiem a split/vsplit będzie liczba,
to nowe okno będzie miało wysokość tylu linii ile podano tej liczbie. Pomiędzy oknami można się przemieszczać kombinacją Ctrl-W W (działa także kombinacja Ctrl-W Ctrl-W – to dla tych „prędkich” którzy nie zdążą zdjąć palca z Ctrl). Okno zamyka się poleceniem :close lub kombinacją Ctrl-W c. Każde okno można dzielić wielokrotnie a także przesuwać (Ctrl-W r obraca okna zgodnie z ruchem wskazówek zegara a Ctrl-W R przeciwnie, Ctrl-W K przesuwa okno na samą górę a Ctrl-W J
na sam dół używając całej szerokości ekranu itp – polecam dokumentację VIMa: :he windows), zmieniać rozmiar (Ctrl-W = wyrównuje wielkość wszystkich okien, Ctrl-W - zmniejsza a Ctrl-W + zwiększa wysokość bieżącego okna – podobnie działają polecenia :resize -N i :resize
+N, gdzie N to liczba wierszy o jakie zmieni się rozmiar okna, domyślnie 1; Ctrl-W < zmniejsza a Ctrl-W > zwiększa szerokość bieżącego okna) – rozmiar okna można także zmieniać korzystając z myszy – po prostu przeciągając krawędź (wymaga to ustawienia opcji mouse).
Tryb diff
Czasem bardzo przydaje się możliwość podglądania różnic między plikami. W takich sytuacjach bardzo pomocny jest tzw. tryb diff – ekran zostaje podzielony pionowo na pół, w oknach pokazane są porównywane pliki a kolorami podkreślone są różnice między nimi.
Aby pracować w trybie diff wystarczy przy uruchomieniu VIMa podać parametr -d a po nim nazwy przynajmniej 2 plików, na przykład:
vim -d index.php index.old.php
Praca z CVSem
Pod adresem http://vim.sourceforge.net/scripts/script.php?script_id=58 znajduje się plik dodający do gvim’a menu, zawierające wszystkie opcje niezbędne przy pracy z CVSem.
Uruchamianie skryptów z poziomu VIMa
Istnieje możliwość uruchomienia aktualnie edytowanego pliku za pomocą polecenia :make. Trzeba jednak odpowiednio poprawić działanie tej komendy. W katalogu .vim/compiler/ stworzyć plik php.vim o następującej treści:
if exists("current_compiler") finish endif let current_compiler = "php" let s:cpo_save = &cpo set cpo&vim set makeprg=export QUERY_STRING=$*;php $* | grep '</b> on line <b>' set errorformat=<b>%*[^<]</b>: %m in <b>%f</b> on line <b>%l</b><br> let &cpo = s:cpo_save unlet s:cpo_save
Teraz program uruchamia się poleceniem :make % zmienna=wartość. Jeśli kompilator zwrócił jakieś błędy, VIM automatycznie przejdzie do linii w której był pierwszy z nich. Jeśli było ich więcej (raczej się nie zdarza w przypadku PHP), to do następnego przechodzi się poleceniem :cn a do poprzedniego
:cp.
Uwagi dotyczące innych języków programowania
- ctags obsługuje także następujące języki programowania: assembler, asp, awk, C, C++, BETA, COBOL, Eiffel, Fortran, Java, Lisp, Makefile, Pascal, Perl, Python, REXX, Ruby, Scheme, skrypty powłoki, S-Lang, tcl, vim.
- Przy pracy z językami programowania które wymagają kompilacji, VIM umożliwia automatyczne przechodzenie do linii, która wywołała błąd kompilatora. Wystarczy stworzyć plik Makefile (ręcznie albo przy pomocy mojego programu Makegen), wywołać
kompilację za pomocą polecenia :make i przechodzić po kolejnych błędach za pomocą poleceń :cn (następny błąd) :cp (poprzedni błąd).
Od autora
VIM posiada bardzo rozbudowaną dokumentację – wszystkie z opisywanych przeze mnie poleceń i opcji jest szeroko opisana. Wystarczy wydać polecenie :he _nazwa_ aby dowiedzieć się czegoś więcej, niż jest napisane w tym artykule.
Mam nadzieję, że wszyscy, którzy ten artykuł przeczytali, nauczyli się
przynajmniej tyle, ile ja pisząc ten tekst 🙂
Duża ilość informacji przydatnych nie tylko programistom PHP w formie pigułki. Dziękować! 😉
Porządny artykuł!
Sporo skorzystałem,
również dziękuję
!