Existuje spousta způsobů, kterými je možné vytvářet PHP skripty. Někomu stačí poznámkový blok, jiný využívá všech vymožeností různých IDE. Někde uprostřed pak jsou schopné textové editory jako je Vim. Nechci se přít o to, který editor je nejlepší. Tak jako má každý editor svoji filozofii, tak i každému člověku vyhovuje něco jiného. V tomto článku bych chtěl ukázat jak může Vim zpříjěmnít a urychlit práci.

Editor Vim se od ostatních nejvíce odlišuje tím, že pracuje v několika režimech. V každém z nich se pracuje jiným způsobem a každý z nich také nabízí různé možnosti. Dva základní režimy jsou režim vkládací a režim příkazový.

Vkládací režim slouží pro normální psaní textu. Tedy každá stisknutá klávesa se promění ve znak v editovaném souboru.

Příkazový režim nám dává možnost upravovat již napsaný text a většina příkazů o kterých budu dále psát se zadává právě v tomto režimu.

Ty z vás, kteří jsou vyděšení dvěma režimy práce, bych chtěl uklidnit, protože vše co je možné dělat v příkazovém režimu je možně přemapovat na klávesové zkratky a používat to i ve vkládacím režimu.

Teď bych rád ukázal co mám na Vim rád.

Zvýrazňování syntaxe
Zvýrazňování syntaxe značně zpřehledňuje kód. Já používám skript PHP syntax.

Skok na řádek
Pokud zjístím že mám chybu ve zdrojovém kódu na 25 řádku dostanu se na něj pomocí příkazu 25G.

Vyhledávání
Pomocí * označím slovo pod kurzorem + všechny výskyty v editovaném souboru a zároveň přesunu kurzor na následující vyskyt. Obdobně funguje #. Jen s tím rozdílem, že přesune kurzor na předchozí výskyt v textu. Pomocí /vyraz vyhledám a zvýrazním všechny výskyty výrazu v textu. Na další výskyt vyhledaného výrazu přeskočím klávesou n, na předchozí výskyt klávesou N. Při vyhledávání můžu využívat také síly regulárních výrazů.

Skok zpět
Pokud jakýmkoliv způsobem dojde ke skoku v editovaném textu (například po úmyslném skoku na určitý řádek, nebo po vyhledávání) můžu se použitím (dvakrát jednoduchá uvozovka) vrátit zpět na místo před skokem.

Nový řádek
Stiskem klávesy o se přepnu do vkládacího režimu a začnu psát nový řádek pod aktuálním řádkem, siskem O nad aktuálním řádkem.

Zvýraznění párové závorky
Pokud mám kurzor na závorce, zvýrazní se závorka k ní párová.

Skok na párovou závorku
Pomocí příkazu % můžu skočit na párovou závorku. Vim umí rozeznat všechny typy závorek a navíc i dvojznak komentáře /*.

Kopírování do schránky (registru)
Pokud chci něco zkopírovat do schránky tak použiju klávasu y (yank) následovanou pohybovým příkazem nebo příkazem pro označení objektu.
Pár přákladů:
yy – uloží do schránky aktuální řádek
yw (yank word) – uloží do schránky slovo
y2w (yank 2 words) – uloží do schránky 2 slova
y20l nebo y20 right – uloží do schránky 20 znaků napravo od kurzoru
y10j nebo y10 down – uloži do schránky aktuální řádek a 10 následujících
yas (yank a sentence) – uloží do schránky větu začínající velkým písmenem a končící interpunkčním znaménkem (kurzor může být kdekoliv uprostřed věty).
yi“ (yank inner block „) – uloží do schránky vše co je mezi dvojitýma uvozovkama
ya“ (yank a block „) – obdobně jako předchozí příklad avšak text ve schránce bude včetně uvozovek
obdobně pro další párové konstrukce ( yi’, yi(, yi{, yi[, yi<, ya’, ya(, ya{, ya[, ya< )
yit (yank inner tag-block) – uloží do schránky vše co je mezi otevíracím a ukončovacím xml tagem.

Vkládání
Pro vležení textu ze schránky za kurzor slouží p (paste), před kurzor P. Síla je v tom, že je možné použít násobné vložení. Pokud chci nějaký řádek pětkrát zkopírovat, zkopíruji jej nejdříve do schránky pomocí yy a následně pětkrát vložím pomocí 5p.

Mazání
K mazání slouží příkaz d (delete). Je možné jej používat stejným způsobem jako příkaz y. Při mazání se vše ukládá do schránky, toho využívám například pro záměnu dvou řádků příkazem ddp.

Editace
Jelikož Vim má oddělený příkazový a vkládací režim, existuje u něj také funkce c (change), která vlastně provede smazání požadované části textu a přepnutí do vkládacího režimu. Použití je obdobné jako u výše uvedeného příkazu yank. Například ci“ vymaže text mezi uvozovkama a přepne do vkládacího režimu, kde můžeme mezi uvozovky napsat nový obsah.

MALÁ/velká písmena
Změnit velikost písmen je snadné. gu převede text na malá písmena gU převede text na velká písmena. g~ změní velikost písmen v textu. Všechny příkazy následuje pohybový příkaz, který vymezí které části textu se má změna týkat.


Odsazení

Ve Vim používám automatické odsazování, které mi ušetří stisk tabulátoru nebo mezerníku ve vnořených blocích programu. Je možné si nastavit zda chci pro odsazování používat tabulátor nebo několik mezer. Pokud chci změnit odsazení řádku, tak nemusím přemístit kurzor na jeho začátek a tam přidávat nebo mazat mezery, ve Vim stačí ve vkládacím režimu stisknout ctrl-t pro posunutí řádku o ůroveň doprava, nebo ctrl-d pro posunutí řádku o úroveň doleva. V příkazovém režimu se pro posunutí jednoho řádku doprava používá >>, pro posun doleva pak <<. Pokud chci změnit odsazení více řádků předřadím příkazu číslo. Například 5>> odsadí pět řádků doprava. Často je potřeba změnit odsazení celému bloku kódu. Ve Vim je to hračka. Pro zvětšení odsazení bloku ve složených závorkách použiju >i{.

Značky
Pokud si při editaci zdrojového kódu potřebuju na chvíli odskočit na jině místo, nemusím si pamatovat číslo řádku abych se dokázal rychle vrátit zpět, prostě si na aktuálním řádku udělám značku. Například ma (mark a) mi aktuální řádek uloží pod písmeno a. Až se budu chtít na tento řádek vrátit použiju ‘a.

Kontrola syntaxe
Do Vim jsem si přidal plugin pro kontrolu syntaxe. Při každém uložení zdrojového kódu se zavolá kontrola syntaxe pomocí php-cli. Při nějakém problému se přímo ve Vim zobrazí chybové hlášení a kurzor se přesune na řádek s chybou.

Doplňování textu
Pro urychlení zadávání dlouhých identifikátorů používám klávesové zkratky ctrl-p a ctrl-n. Jednoduše napíšu prvních několik znaků a stisknu ctrl-p (previous) Vim pak hledá v předchozím textu slova začínající již napsanými písmeny a zobrazí mi seznam možností jak slovo doplnit. Pokud chci hledat v textu za kurzorem použiju ctrl-n (next). Slova jsou vyhledávána nejen v aktuálně editovaném souboru, ale také v souborech odkazovaných (např. funkcí include). Pokud chci pro vyhledávání slov pro doplňování použít vlastní soubor s klíčovými slovy použiji klávesové zkratky ctrl-x ctrl-k (keywords). V takovém souboru mám uloženy klíčová slova PHP a můžu si tak usnadnit psaní dlouhých názvů funkcí.

Skládání (folding)
Občas je vhodné si skrýt tělo nějaké funkce, nebo jiný blok kódu. K tomu se používá funkce skládání. Většina IDE tuto funkci používá pro skrývání funkcí, kdy se místo těla funkce objeví vedle její hlavičky znak +, kterým je možno funkci rozbalit. Vim umožnuje sbalovat jakýkoliv úsek souvislého textu. Pomocí příkazu zf (fold) následovaným pohybovým příkazem vytvoříme sklad. Například zf2 down složí aktuální řádek a dva řádky pod ním. zfi{ někde v bloku funkce složí tělo funkce. Sklad se rozloží příkazem zo (open). Odstraní se příkazem zd (delete). Sklady je možné vnořovat. Pro PHP je také možné využít funkci autofolding, která automaticky skládá těla všech funkcí.

Seznam názvů tříd, funkcí a proměnných
Kdo si má pořád pamatovat, nebo hledat jak vlastně pojmenoval kterou funkci… Proto jsem si do Vim přidal plugin Taglist (využívá ctags), který zobrazí okno s názvy tříd, funkcí a proměnných, které jsou použity v právě editovaném souboru.

Pokud vás editor Vim zaujal a chtěli byste se o něm dovědět víc (třeba jak ho vypnout:), tak doporučuji rozsáhlé povídání Pavla Satrapy.