neděle 7. července 2013

Sublime Text 3 beta pro všechny...

Všiml jsem si, že byla před pár dny uvolněna beta třetí verze textového editoru Sublime Text s neomezenou zkušební dobou i pro neregistrované uživatele. Před časem jsem zkoušel jeho předchozí verzi jako náhradu Geany pro mé skriptování a byl jsem velmi mile překvapen. Sublime Text je pro psaní kódu vybaven mimořádně, umí fůru užitečných věcí, například vícenásobný kurzor umožňující psát na libovolném množství míst v dokumentu současně, a hlavně se extrémně dobře používá, což zahrnuje i opravdu bleskové reakce GUI.

Sublime Text 3 na rychlosti ještě přidal a výrazně vylepšil navigaci v projektu doplněním nabídky Goto o vyhledávání symbolů (Goto Symbol in Project) a definic (Goto Definition) v celém projektu. API pro rozšíření přešlo také z dvojkové na trojkovou verzi, ovšem Pythonu, přibyla podpora monitorů s velmi vysokou hustotou bodů a spousta dalších vylepšení, které najdete v o pár řádků výše odkazovaném changelogu.

Chtěl jsem napsat jen krátkou zprávu, ale protože jsem sám doposud Sublime Text moc efektivně používat neuměl, zahučel jsem do toho a své poznatky postupně do blogu přidával, takže ti, kteří tento editor ještě nezkoušeli, ani jinde nestudovali, mohou dostat trochu povědomí o základní výbavě, včetně případné instalace v Ubuntu ...

Instalace

Instalace je možná stažením instalačního balíku přímo pro Ubuntu (32 i 64 verze), nebo si můžete stáhnout archiv, rozbalit ho kamkoliv a používat přímo, bez jakékoliv instalace. Andrew z webupd8.org vytvořil i repozitář, který vám zajistí aktualizace. Tento repozitář jen zprostředkovává instalační balíky přímo z oficiálních stránek.

Pár základů

Sublime Text je navržen opravdu pečlivě a tak všechno, co jsem v něm zatím objevil, dává smysl a mám radost z toho, že nad tím někdo opravdu přemýšlel. Sám jsem se tomu doposud nevěnoval příliš intenzivně, takže si s vámi projdu pár základů, abych se do toho trochu dostal.

Navigace v projektu

V Sublime Text si můžete do projektu přidávat celé adresáře, i jednotlivé soubory, všechny se zobrazují v levém panelu, adresáře stromově. Můžete sem další přetahovat přímo ze správce souborů, nebo přidávat přes nabídku Project. Levý postranní panel můžete nechat schovat, většinou ho moc potřebovat nebudete, protože pro navigaci v dokumentech je tu daleko efektivnější nástroj Goto Anything s klávesovou zkratkou Ctrl+P. Po aktivaci této funkce se vám zobrazí vyhledávací políčko a pod ním rovnou seznam všech souborů z projektu. Postupným psaním seznam můžete filtrovat, přičemž první dokument na seznamu se vždy okamžitě otevírá jako náhled v hlavním okně. Po odentrování se daný soubor otevře v dalším tabu, nebo se jen přepne na tab, ve kterém je již soubor otevřen. Výborné je i to, že vůbec nemusíte zadávat přesné řetězce - když místo common napíšete cmn dostanete co potřebujete také. Schpnosti Goto Anything ale nekončí s navigací v souborech, zahrnují i navigaci v obsahu souborů.

Chcete-li v aktuálním dokumentu vyhledat slovo, stačí na začátek napsat znak '#' (hash) a za něj hledaný výraz. Přímo se k tomuto dostanete zkratkou Ctrl+;. Po napsání hashe se okamžitě zobrazí seznam všech slov v dokumentu a jak píšete, seznam se filtruje a dokument se bez prodlení přesouvá k nalezenému slovu, takže hned máte k dispozici i kontext a můžete případně hledaný výraz rovnou opravovat a měnit. A stále můžete psát zkratkovitě, třeba prt místo Print. Pokud je návrhů odpovídajícím zadanému řetězci více, můžete seznam projet korzorovýmí klávesami a pokaždé se dokumet hned posune na patřičné místo. Když si nevyberete (třeba jste se jen chtěli podívat na kousek kódu), klávesou Esc dialog zavřete a dokument se posune zpět na původní místo. Toto vyhledávání se hodí pro unikátní řetězce, pokud je stejné slovo v dokumentu na různých místech, dostanete se k jeho prvnímu výskytu. Klasické vyhledávání přes Ctrl+F dává více možností.

Pokud místo hashe použijete '@' (zavináč), můžete předchozím způsobem vyhledávat pouze symboly, tedy třeba třídy a metody. To je dáno definicí symbolů pro daný typ dokumentu. Místo Ctrl+P a @, můžete použít přímo zkratku Ctrl+R. Pokud budete chtít hledat symbol v celém projektu, můžete použít další zkratku Shift+Ctrl+R. To se s klikáním v postranním panelu Geany srovnat nedá.

Dále můžete použít ':' (dvojtečku) pro skok na konkrétní číslo řádku. Můžete využít i přímou klávesovou zkratku Ctrl+G.

Můžete začít vyhledávat dokument a plynule přejít na konkrétní řádek, slovo, nebo symbol, např. conf:59 mě může dostat na 59. řádek dokumentu config.py, kde mi interpret Pythonu našel chybu.

V Goto nabídce přibyla i zmíněná funkce Goto Definition, která vám umožní nalézt kdekoliv v projektu třeba definici třídy. Stačí označit její referenci v kódu, stisknout F12 (pokud tam nemáte jako já namapován terminál), nebo kliknout do menu Goto.

Ke Goto Anything jsem našel pěkné video, které dá kompletní představu, jak to funguje. Je to sice o Sublime Text 2, ale to vůbec nevadí.




Co se navigace týká, nedá se nezmínit zmenšený náhled dokumentu na pravé straně. Sice nepřečtete znaky, ale vidíte strukturu, včetně barev rozlišujících syntaxi, takže máte další pomůcku pro nalezení konkrétní části dokumentu a kliknutím se okamžitě na dané místo přemístit. Na předchozím videu to ostatně můžete vidět.

Selekce a více kurzorů

Celé slovo ve kterém se nachází kuzor označíte Ctrl+D, další stisky této zkratky postupně označují další výskyty daného slova s tím, že za každý se přidá další kurzor, takže pokud začnete kurzor posouvat, či psát bude se tak dít všude najednou. Alt+F3 označí všechny výskyty takto označeného řetězce v dokumentu. Shift+Ctrl+šipky vpavo/vlevo označuje po slovech, Shift+Alt+šipky vpravo/vlevo také po slovech, ale rozlišuje i slova ve slovech (např. MenuItem vezme na dvakrát). Shift+Ctrl+M označí všechno mezi závorkami, ve kterých se nachází kurzor, další stisk zahrne i ony závorky a další případně výběr rozšíří k dalším závorkám, atd. Shift+Ctrl+J označí celý blok spadající do aktuálního odsazení  (pythonista si tak může jednoduše označit celou třídu/metodu/cyklus).

Shift+Ctrl+L postupně označuje celé řádky, za každým umístí vlastní kurzor. Pokud ji použijete na víceřádkovou spojitou selekci, po řádcích ji rozdělí. Ctrl+L označuje také celé řádky, ale spojitě a naopak spojuje rozdělenou selekci.

Text můžete označovat i klasicky myší, s držením levého tlačítka, se současným držením Ctrl můžete postupně označovat více bloků textu. A zkratkou Ctrl+T je pak mezi sebou můžete prohazovat. A co takle označit blok s rozlišením na sloupce? Pomocí kombinace Shift+pravé tlačítko myši, nebo Shift+Alt+šipky žádný problém. Blok může mít i nulovou šířku, jen si tak můžete namnožit kurzory a pak třeba odsadit celý blok kódu najednou.

Ctrl+U funguje jako Undo, ale oproti Ctrl+Z na všechno, včetně selekcí, nejen na změnu kódu. Selekcí a vícenásobného kurzoru se zbavíte klávesou Esc.

Vyhledávání

Klasická zkratka Ctrl+F zobrazí ve spodní části okna lištu a můžete začít rovnou psát hledaný řetězec a dokument se přesouvá na odpovídající místo. V textu se rámečkem zvýrazňují i všechny další výskyty a ten aktuální je označen/vybrán. Vyhledávání pokračuje klasicky od kurzoru dál a na další výskyt se můžete přesunout klávesou Enter. Se současným držením Shiftu vás Enter naopak přesouvá k předchozímu výskytu. Ve vyhledávací liště máte tlačítka pro modifikaci chování vyhledávání, ale kdo by se obtěžoval s myší, klávesové zkratky jsou rychlejší - Alt+R přepíná na regulární výraz, Alt+C rozlišování velikosti písmen, Alt+W přesné znění slova (což zahrnuje i to, že nebude začínat tečkou, nebo za ním nebude následovat podtržítko, kdežto pomlčka může) a Alt+Enter označí všechny odpovídající výskyty v celém dokumentu a samozřejmě dá každé selekci svůj kurzor, takže pak můžete všechny najednou přepsat.

Vyhledávat můžete dokonce multiřádkové vzory, další řádek přidáte Ctrl+Enter. Především v režimu regulárního výrazu může být tato vlastnost užitečná - chci třeba všechny definice proměnné item, za kterými hned následuje připojení signálu:

\Witem =.*
.*connect

Trochu krkolomné, ale nic lepšího mě teď vyzkoušet nenapadlo.

Dále je tu ještě zjednodušené inkrementální vyhledávání pod Ctrl+I, které neobsahuje navigační možnosti a po stisku Enteru vyhledávací lišta zmizí a vrátíte se do dokumentu.

Využít můžete i klávesu F3, která vás přenese na další výskyt posledního hledaného vzoru, nebo se Shiftem na předchozí. Alt+F3 jsem již zmiňoval, označí všechny řetězce odpovídající poslednímu hledanému. A tady pozor, protože posledním hledaným nemusí být to, co jste naposledy zadali do vyhledávacího políčka, protože se do tohoto zásobníku řadí i vzory selekčních funkcí. Když například označíte slovo přes Ctrl+D, automaticky se prohledá celý dokument a toto slovo bude jako poslední na zásobníku hledaných vzorů. Zatímco když jen myší označíte kousek textu, ke globálnímu vyhledávání nedojde.

Chytré doplňování závorek

Jednou z věcí, které mi v Geany komplikují život, je automatické doplňování závorek. Myslím tím, že je to fajn záležitost, ale hodně často se mi stává, že tu koncovou závorku stejně automaticky napíšu, i když nemusím a přestane to dávat smysl. Sublime Text má pro takové nedokonalé jedince jako jsem já pochopení a tak když tu závorku napíšu, když už tam je, prostě jen posune kurzor a nechá tam tu původně automaticky doplněnou.

Našeptávač

I našeptávač funguje tím fuzzy způsobem a tak se nemusím obtěžovat znovu psát třeba on_appindicator_scroll, ale stačí mi oas a Enter. Místo AttributeError - ate Enter. To je pro datla velmi zásadní úspora času.

Příkazová řádka

Teď mám na mysli příkazy Sublime Textu, ke kterým vás zavede klávesová zkratka Shift+Ctrl+P. Po vyvolání můžete seznam dostupných příkazů rovnou procházet a psaním samozřejmě filtrovat. Můžete odsud změnit typ dokumentu (Python, C, ...), spustit build projektu, nebo třeba schovat/zobrazit levý panel se soubory, nebo náhled kódu vpravo. Nemusíte si pamatovat klávesové zkratky, jen začnete psát třeba side, nebo bar a pak praštíte do Enteru. Zrovna tak můžete třeba označený blok textu převést na uppercase - stačí označit, Shift+Ctrl+P, upp, Enter. V ST3 je nabídka příkazů nějaká chudší, něco mi chybí oproti ST2, snad to ještě vyřeším. Nicméně v Unity tuto funkčnost velmi dobře doplňuje HUD, protože ten funguje stejným způsobem pro celé menu aplikace - stisknete Alt a začnete psát pár znaků z položky, kterou hledáte.

Snippety

K dispozici jsou tu i tzv. snippety, tedy předdefinované kousky textu/kódu které můžete vkládat do dokumentu. Různé programovací jazyky mají již nějakou základní sadu, kterou si můžete rozšiřovat. Najdete je v menu Tools > Snippets, což je to samé, jako když použijete Shift+Ctrl+P a napíšete snippet (nebo méně). Tyto snippety se dají vkládat rovnou do kódu zapsáním definovaného řetězce, který má každá položka menu se snippetem napsaný u pravého okraje. Např. snippet New class můžu do kódu vložit napsáním class a stisknutím Tabulátoru. Snippety umožňují i navigaci po jeho jednotlivých částech, které je potřeba modifikovat, opět Tabulátorem. Napíšu tedy class, stisknu Tab (nebo Enter, protože našeptávač mi tuto možnost také nabízí), vloží se konstrukce třídy, označí se její jméno, které tak okamžitě můžu přepsat, stisknu Tab znovu, napíšu seznam tříd, od kterých bude ta nová odvozena (Python umí dědit hromadně), atd.

Vlastní klávesové zkratky a další nastavení

Všechna konfigurace je v souborech formátu JSON a dostanete se k ní přes menu Preferences. Nabídka nepotřebuje příliš vysvětlování, konfigurační soubory jsou děleny na výchozý a uživatelské, výchozí klávesové zkratky tak najdete v Preferences > Key Bindings - Default a konfigurace vlastních zkratek je hned pod tím, tu můžete editovat a výchozí tak přepsat. Je to přehledné a srozumitelné.

Rozšíření

Sublime Text lze také ládovat různými rozšířeními, kterým nabízí své API. V trojkové verzi došlo ke změně a přechodu na Python 3.3, tudíž ne všechna rozšíření, která byla původně napsána pro předchozí verzi, jsou pro trojku dostupná, protože je nikdo nepřepsal. Mezi novinky patří i to, že by chyba v rozšíření by neměla být schopna sejmout celý editor.

Rozšíření kompatibilní s trojkou můžete nalézt zde:
Sublime Text 3 Compatible Packages

Nefunkčnost některých rozšíření může být důvodem pro setrvání u verze 2, protože jejich přínos může být vyšší, než novinek ve trojce.

Každopádně nejdůležitějším rozšířením je Package Control, které vám umožní velmi jednoduše instalovat další rozšíření přímo z nabídky v Sublime Textu.
Podle návodu tvůrců je postup v Ubuntu následující:

cd ~/.config/sublime-text-3/Packages/
git clone https://github.com/wbond/sublime_package_control.git "Package Control"
cd Package\ Control/
git checkout python3

Po dalším startu editoru se rozříření objeví v nabídce pod Preferences > Package Controll a k jeho položkám máte přístup přes příkazový řádek Shift+Ctrl+P. Přes Install se dostanete k dalším rozšířením, kterými si můžete editor vylepšit.

Podpora jazyka Vala

Vala Sublime Text stále chybí, tedy není v základní instalaci, neviděl jsem ho ani v Package Control. Musím si tedy pomoci způsobem, který doporučují na webu GNOME, jen si to přizpůsobím pro novou verzi Sublime Text (vyměnil jsem dvojku za trojku):

cd ~/.config/sublime-text-3/Packages
git clone git://github.com/technosophos/Vala-TMBundle.git Vala

Pokud nemáte git, nainstalujte ho, ostatně systém vám napoví.
Součástí je i sada snippetů.


Další studium

Sublime Text toho umí opravdu fůru, nebudu se dnes snažit to obsáhnout vše, můžete nakouknout do oficiálně doporučované neoficiální dokumentace. Kouknout můžete i na následující obsáhlý video tutorial, je sice o dvojce a pro macka, proto jsou některé zmiňované klávesové zkratky úplně jiné, ale to nevadí, tutorial je to hodnotný, dobře udělaný a když vás něco zaujme, bezpochyby si cestu najdete. Nebo si najdete tutorial jiný. A nebo ne.




Závěr

Sublime Text je opravdu výborný editor, když si člověk osvojí pár základů, těžko se vrací k něčemu hloupějšímu. Jediné mínus je fakt, že to není open source. Pokud se rozhodnete pro nákup licence, určitě to nebude vašich nejhůř investovaných 70 dolarů. Registrovaní uživatelé s řádnou licencí mají, krom dobrého pocitu (nemluvím o profesionálech, tam je to jasné), i pár dalších výhod, například se dříve dostanou k novinkám. Například tuto třetí verzi mohou registrovaní uživatelé testovat již půl roku. Nebo můžete spoléhat na neomezenou testovací verzi, pokud s tím nemáte morální, nebo ideologický problém. Sublime Text je boží a je jen na vás, jestli to oceníte i bankovním převodem.

1 komentář:

  1. Kdyby to dali se zdrojákem, museli by sofistikovaněji vymýšlet, jak to prodávat, protože pak by se to ze zdrojaku dalo přeložit bez placení. Na druhou stranu takto si to exoti mého typu nespustí, nemají totiž kde.

    OdpovědětVymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.