ViM i PHP » aspiryna.net

ViM i PHP

Autor: leafnode | Data: 26.08.2007, 11:01 | Kategoria: PHP, Programy

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 :)

Zobacz też




Komentarzy: 2 do “ViM i PHP”

  1. Karol Zalewski,

    Duża ilość informacji przydatnych nie tylko programistom PHP w formie pigułki. Dziękować! ;-)

  2. spiral,

    Porządny artykuł!
    Sporo skorzystałem,

    również dziękuję
    !

Zostaw komentarz

*
To prove that you're not a bot, enter this code
Anti-Spam Image