Vývojářem se člověk často stane tak nějak mimoděk, ve volném čase, aniž by se na to nějak soustavně připravoval nebo studoval. A i ve škole se učíme jen teorii programování – co jsou to podmínky, cykly a tak podobně. Ale programování je podle mého napůl umění a napůl řemeslo. A jako řemeslníci bychom měli znát své nástroje. Tak jako zedník zná rozdíl mezi lžící, špachtlí a fankou a ví, kterou na co použít, tak i vývojář by měl znát svoje IDE.
Sám musím přiznat, že jsem dlouho psaní v IDE odolával. Všechno jsem psal v PSPadu a naprosto jsem nechápal, jak někdo může psát v něčem, co minutu startuje (před příchodem SSD to bylo normální). Pak jsem, potom co jsem k certifikaci dostal licenci Zend Studia (vylepšené Eclipse), přešel na IDE. Už v té době mělo slušné možnosti refaktoringu a napovídání kódu. Teď je to přibližně tři roky, co jsem si poprvé nainstaloval PHPStorm a zkusil v něm chvíli pracovat.
Po těch třech letech jsem s tím, jak PHPStorm umím používat, docela spokojený. Proto vám chci nyní ukázat, jak být za pomoci PHPStormu produktivnější a jak naplno využít možnosti, které poskytuje. Popisovat budu poslední verzi – průběžně během psaní článku upgraduji na nové verze v rámci Early Access Programu. Zmíněné rady jsou z velké části společné pro všechny JetBrains produkty, takže pokud píšete v InteliJ IDEA, PyCharmu, Webstormu nebo CLionu, tak si z článku určitě také něco odnesete.
Na začátek je potřeba upozornit na to, jak v PHPStormu fungují Settings. V menu najdete kromě File > Settings také File > Default settings. První jmenované mění nastavení projektu, druhé je použité u nových projektů. Doporučuji upravit defaults a pak případně založit nové projekty. Je to lepší než postupně upravovat třeba dvacet projektů nebo mít rozházené nastavení. V Settings se dá vyhledávat pomocí pole nahoře (nebo prostě jen začnete psát). Nebudu tedy zmiňovat, kde přesně nastavení je, ale jen jak se jmenuje, snadno si ho najdete sami. Obrázky v článku jsou animované gify. Otevřete si je v lightboxu, abyste viděli animaci.
Jak se dostat tam, kam potřebuji?
Začneme pozvolna. Nejčastější činností při programování je hledání a otevírání souborů. Během dne jich otevřu, zavřu a zas otevřu stovky, ne-li tisíce. U takto časté činnosti se vyplatí optimalizovat. PHPStorm už v minulé verzi zařadil Search Everywhere – inspirace SublimeTextem z toho kouká na každé kliknutí. Můžete v něm vyhledávat cokoli v celém IDE. Soubory, složky, třídy, metody a dokonce i funkce samotného IDE.
Ve výchozím stavu se vyvolává dvojitým stiskem Shift
. Já doporučuji přemapovat – často se mi stávalo, že jsem zkratku mačkal omylem při psaní a jindy se mi stalo, že jsem ji nezmáčknul dobře, když jsem chtěl (nakonec jsem skončil u Ctrl+Shift+X
, která je pro mě snadno stisknutelná bez zbytečného vytáčení rukou).
V Search Everywhere můžete vyhledávat nejen celá slova a názvy, ale můžete psát i camelCase a vyhledávat v rámci složek. Například předpokládejme, že chci vyhledat viewčko index.phtml
, které odpovídá product-parameters
controlleru. Pokud dám hledat index.phtml
, najde mi to milion souborů s tímto názvem. Pokud ale vím, že soubor je ve složce modules/default/views/scripts/product-parameters/index.phtml
, tak stačí napsat d/v/pp/index
(tedy d(efault)/v(iews)/p(roduct)p(arameters)/index
). Všimněte si, že není třeba napsat všechny kroky cesty a v rámci složek je možno používat všechny možné myslitelné oddělovače (pp = product-parameters, samotné „p“ by našlo products, pages,…). To samé platí pro názvy tříd. Třídu Admin_ProductsController
najdete snadno jako APrC
. Můžete napsat kolik písmen chcete, víc nebo míň. Pokud neznáte přesné jméno souboru, ale víte, že je v nějaké složce, tak i složky jdou hledat a otevřou se v postranním Project panelu.
Search Everywhere je možné použít i na funkce IDE, na které není nastavená zkratka. V mém případě např. File encoding, Use soft wraps nebo Override methods. Při určitém množství zkratek, které člověk používá, přestane být efektivní se učit další, speciálně pokud je nepoužívá často. A tato funkce je spolehlivě nahradí. Samozřejmě camelCase hledání funguje i v tomto případě – tedy například FEnc
vám najde File encoding.
Od doby, co jsem přešel na Search Everywhere, používám postranní panel se složkami prakticky jen pokud edituji víc souborů v jedné složce. S čímž souvisí druhá důležitá věc, která je (pro mě nepochopitelně) ve výchozím stavu vypnutá, a to Scroll from source. Najdete ji pod ozubeným kolečkem na postranním panelu Project (Alt+1
). Díky ní se vám rozbalí cesta na straně vždy na soubor, který máte otevřený – ideální na editaci souborů ve stejné složce. Na všechno ostatní je tady Search Everywhere :) Mimochodem to samé jde nastavit i pro Structure (Alt+7
), která zobrazuje strukturu momentálně otevřeného souboru (metody a atributy v PHP třídě, strom elementů v HTML souborech).
Shrnutí
- Search Everywhere
Ctrl+Shift+X
- dají se hledat soubory, třídy, metody i funkce IDE
- při hledání funguje camelCase a části cesty k souboru oddělené lomítky
- zapněte si Scroll from source
Práce s textem
Pokud zrovna nic nehledáte, tak pravděpodobně píšete nebo jinak pracujete s textem. Možnosti, jak to dělat efektivně, prozkoumáme v této kapitole. Jen pro jistotu si zopakujeme zkratky, které fungují napříč aplikacemi (ve Windows – na Macu jsou trošku jiné).
Při běžném pohybu kurzorovými šipkami lze využívat funkční klávesy Shift
a Ctrl
. Se Shiftem
vybíráte text. S Ctrl
se pohybujete po slovech. Shift+Ctrl
vybírá text doprava a doleva po slovech, případně nahoru a dolů po odstavcích. Ctrl
funguje také ve spojení s Backspace
, kdy smaže celé slovo. Ale pojďme se podívat na něco složitějšího.
Věc, kterou vídám asi nejčastěji, je přesouvání řádků. Vývojáři často používají megakombo Home
, Shift+End
(případně Ctrl+Shift+RightRightRightRight
), Ctrl+X
, …, Ctrl+V
. Přitom IDE má speciální funkci Move Line Up/Down… a já ji prakticky nepoužívám! Proč? Protože existuje ještě lepší funkce, a to Move Statement Up/Down (Alt+Up/Down
), která inteligentně přesouvá celé bloky. Dokáže například prohodit dva odstavce v HTML, i když jsou na více řádcích.
Mně osobně šetří nejvíc práce vícenásobný kurzor (Alt
), Add selection for next occurence (Alt+Y
) a Extend/Shrink Selection (Alt+Shift+Up/Down
). Díky tomu dokážete podobné věci jako s makry ve Vimu. Vícenásobný kurzor vyvoláte Alt+kliknutí/tahnutí
(nebo prostředním tlačítkem). Snadno s ním například doplníte prefix nebo chybějící čárky v poli.
Vícenásobný kurzor je ovšem nepraktický, pokud máte spoustu řádků, které nejsou zarovnané pod sebou a museli byste klikat kurzory po jednom a trefovat se na správné místo. K tomu lze využít Add selection for next occurence – stačí najít nějaký společný prefix, ten si vybrat a pak udělat úpravu, jako byste pracovali s jedním kurzorem.
Síla tohoto přístupu se ale plně projeví, až když dokážete správně použít Extend/Shrink Selection. Typickým příkladem je třeba refaktoring pole na funkce, které vyhodí výjimku, pokud položka neexistuje. Na to by sice šlo použít Replace, ale než ho vymyslíte, tak je lepší to napsat ručně.
Následující ukázka tento přístup dobře ilustruje. Najdu společný prefix 'name'[mezera]
(mezerou jsem odfiltroval 'name',
) a použiju Add selection for next occurence (Alt+Y
), abych vybral další místa, kde se to objevuje. Pak End
, několikrát Left
a jsem uvnitř stringu. Pomocí 2x Extend Selection (Alt+Shift+Up
) vyberu celé stringy, zkopíruji do schránky a pak vložím do výpisu dole. Pak pomocí vícenásobného kurzoru vložím na konec čárky. Tenhle postup je nejen rychlejší, ale i bezpečnější, protože se vám nestane, že byste některou z položek při scrollování nahoru a dolů zapomněli zkopírovat nebo napsali typo, pokud píšete ručně.
Extend/Shrink Selection se dá také s úspěchem použít na kopírování větších bloků, kde ušetří spoustu přesného trefování myší. Tenhle článek píšu v PHPStormu. A i když jsem s TrackPointem na Lenovu už docela sžitý, tak vybírat text v drncající tramvaji není úplně pohodlné. Takže když chci např. zkopírovat tučný název featury z předchozího odstavce, tak kliknu kamkoli mezi <strong></strong>
(což je docela velký cíl pro kliknutí) a pak 3x Extend Selection – nejdřív vybere slovo, pak string mezi tagy a nakonec celý tag.
Nejlepší na celé té věci je to, že pokud PHPStorm rozumí kódu, ve kterém se pohybujete (PHP, HTML, SQL, atp), tak rozšiřuje výběr inteligentně na základě konkrétního jazyka (klíč pole → proměnná pole → blok v podmínce → celá podmínka → metoda → třída a zpět).
Shrnutí
- Move Statement Up/Down (
Alt+Up/Down
) - vícenásobný kurzor (
Alt
), Add selection for next occurence (Alt+Y
) - Extend/Shrink Selection (
Alt+Shift+Up/Down
) - zkuste text vybírat pomocí klávesnice
Závěr
V tomto poměrně obecném dílu jsme se podívali na běžnou práci s textem, přesouvání bloků a vybírání a přesouvání textu bez pomoci myši. V příštím díle si ukážeme, jak v PHPStormu využít toho, že chápe kontext jazyka, ve kterém momentálně píšeme.