Obsah
1. Textový editor vim a outline editory2. Základní vlastnosti editoru vim
3. TVO: The Vim Outliner
4. Soubory, z nichž se TVO skládá
5. Nahrávání klávesových zkratek a maker
6. Obsah dalšího pokračování
1. Textový editor vim a outline editory
V předchozích částech tohoto seriálu (I, II) jsem stručně popsal některé často používané outline editory. V některých případech se jednalo o samostatné aplikace (například ThinkTank, KnowIt, TuxCards nebo Hierarchical Notebook), další popisované editory byly (někdy i pro uživatele poněkud skrytě) zabudovány do větších programových celků; jednalo se například o osnovu v Microsoft Wordu či Navigátor OpenOffice.org. Dnes se chci věnovat poněkud odlišnému typu outline editoru: jedná se o kombinaci textového editoru vim s makry TVO, která nad touto aplikací vytvářejí plnohodnotný outline editor, i když s poněkud specifickými vlastnostmi, které vycházejí z vlastností samotného editoru vim, potažmo i jeho předchůdce – editoru vi.
Je však vůbec spojení běžného textového editoru a outline editoru možné a účelné?
Pokusme se nejdříve odpovědět na první otázku, tj. zda je možné vytvořit plnohodnotný outline editor nad editorem textovým. V případě jednodušších textových editorů, mezi něž patří například Notepad (Poznámkový blok; na tu stránku se určitě podívejte :-), xedit, wpe/xwpe nebo joe, to opravdu možné není, alespoň ne bez zásadního zásahu do zdrojového kódu těchto aplikací. Zmíněné editory jsou totiž velmi jednoduché, prakticky pro ně nelze vytvářet složitější makra a také nemají dostatečnou podporu pro tvorbu zásuvných modulů nebo pro komunikaci přes objektovou sběrnici.
Textový editor vim naopak patří, spolu s dalšími vyspělými textovými editory (nejvýznamnější je Emacs) do skupiny aplikací, které jsou značným způsobem rozšiřitelné a programovatelné. Každý z těchto editorů však ke své rozšiřitelnosti a programovatelnosti přistupuje jiným způsobem. Emacs je například sestaven jako sada LISPových maker postavených nad relativně malým jádrem, vim je naopak tvořen výkonným jádrem, nad nímž lze používat několik skriptovacích jazyků, například Perl, Python, Ruby nebo Tcl. V samotném vimu je pak zabudován vlastní procedurální jazyk podobný C-čku.
Odpověd na druhou otázku, tj. zda je účelné spojení textového editoru a outline editoru, je složitější. Velmi totiž záleží na stylu práce konkrétního uživatele. Někdo pro svoji práci preferuje několik jednoúčelových nástrojů, někdo se spokojí s menším počtem univerzálnějších nástrojů typu „vše v jednom“, které si dle potřeby nakonfiguruje. Vzhledem k tomu, že outline editory, které jsou pro mnou používané operační systémy dostupné, poskytují poměrně malý komfort při vyhledávání a editaci, dávám osobně přednost spojení textového editoru vim se zažitým ovládáním a makry nad tímto editorem. Preference ostatních uživatelů mohou být samozřejmě odlišné.
V dalších dvou odstavcích se proto pokusím stručně shrnout některé zajímavé vlastnosti vimu; Emacsu se budu věnovat v některém z dalších pokračování tohoto seriálu.
2. Základní vlastnosti editoru vim
Textový editor vim získal své jméno spojením slov Vi IMitation, později, s dalším rozšiřováním a odstraňováním nekompatibilit s vi došlo k přejmenování na Vi IMproved. Jak je již z jeho jména patrné, jedná se o textový editor, který je svým ovládáním založen na „pravěkém“ unixovém textovém editoru vi. Oba tyto editory se vyznačují několika specifickými vlastnostmi, zejména několika módy činnosti, kterými se dost podstatně odlišují od prakticky všech ostatních textových editorů a procesorů (snad s výjimkou dnes již taky „pravěkého“ procesoru Liquid Paper).
Bram Moolenaar, hlavní autor editoru vim, však provedl několik úprav a rozšíření, kterými vim zpřístupnil i běžným uživatelům. Jedná se zejména o zjednodušené ovládání kurzoru pomocí kurzorových kláves, vizuální bloky, menu spolu s GUI dialogy a mimo jiné také režim „easy vim“, ve kterém se odstraňuje nutnost přepínání mezi několika módy (přepínání módů samozřejmě existuje ve všech textových editorech a procesorech, nikde však není trvalé a patrné tak, jako ve vimu). Díky „easy vimu“ jsem tak mohl vim nainstalovat i běžným uživatelům (sekretářky, účetní), kteří ho používají jako prohlížeč souborů se zvýrazněním syntaxe (jde o výstup z účetnictví, kde lze jednoduše zvýraznit některé důležité skupiny čísel).
Vim, stejně jako jeho předchůdce vi, byl zpočátku určen především pro programátory, díky tomu také obsahuje množství operací, které se uplatní při práci se strukturovaným textem, tedy se zápisem zdrojového kódu. Mezi tyto operace patří automatické zavírání závorek, doskok na závorky, automatické hlídání levého okraje textu a zvýraznění syntaxe. Nově se k těmto operacím přidává i takzvaný folding, tj. vizuální zabalení vybraných řádků textu do řádku jediného, pomocí něhož je možné manipulovat s velkým množstvím informací na poměrně malé ploše obrazovky. Jak bude patrné z dalšího textu, je folding použit jako základ pro makra TVO.
Uživatelské rozhraní unixových systémů je od začátku založeno na příkazové řádce a zpracování strukturovaných textových souborů. Při vyhledávání a úpravě textových informací se používají regulární výrazy, které jsou ve vimu (a dalších editorech z unixové školy) použity při pohybu v textu, vyhledávání a nahrazování textu i při tvorbě složitých maker, které mají pracovat nad určenou částí textu.
Obrázek 1: vim se představuje ve své GUI verzi
Vim však má řadu dalších zajímavých vlastností, kvůli kterým je jeho použití jako outline editoru z mého pohledu výhodné. Tyto vlastnosti se pokusím stručně shrnout v následujících bodech:
- Vim je rozšířen na mnoha platformách s tím, že se jeho vlastnosti na těchto platformách téměř nemění. Sám vim intenzivně používám na Linuxu, Microsoft Windows, DOSu a Solarisu, přičemž během dne pracuji i na několika těchto systémech (v práci zejména Microsoft Windows, doma Linux a na starém počítači s procesorem 486 DOS), proto potřebuji nástroj, který se bude na všech těchto systémech chovat víceméně stejně, samozřejmě s vědomím rozdílnosti těchto platforem, které textový editor nemůže ovlivnit (existence GUI verze, podpora myši, podpora práce se schránkou, změna barev, fontů a kurzorů atd.). Takovou multiplatformností, jakou má vim+TVO, prozatím neoplývá žádný jiný mně známý outline editor.
- Možnost definice vlastního zvýrazňování syntaxe. Jedná se sice o maličkost, ale někdy je velmi užitečné do dlouhého textu zanést barevné zvýrazňování. Zdaleka se nejedná pouze o programovací jazyky, zvýrazňování je možné (s určitými limity) zavést i v běžném textu pro odlišení několika typických textů (tuto vlastnost si ukážeme později).
- Prakticky dokonalé zotavení po pádu. Samotný vim mi na žádné výše zmíněné platformě nikdy nehavaroval, jediný vážnější systémový problém jsem zaznamenal při editaci ve dni změny času (zimní/letní), kdy jsem poprvé a naposledy ztratil vinou vimu část napsaného textu. Avšak některé počítače se vyznačují nestabilitou (HW, OS nebo oboje) a právě na těchto systémech je patrné, že ve vimu je použita velmi účinná metoda pro průběžný zápis editace. Nejedná se o klasické záložní soubory (ty jsou samozřejmě také podporovány), ale o průběžné zaznamenávání editačních operací – v podstatě se jedná (velmi zjednodušeně řečeno) o jakýsi žurnál známý z databází.
- Jak jsem již psal výše, je možné ve vimu použít vlastní programovací jazyk. Tuto schopnost jistě nebudou všichni používat, ale je velmi vhodné použít vestavěný vyhodnocovač výrazů. Při nutnosti provést nějaký součet či složitější operaci tak není nutno startovat aplikaci typu Calc či bc (to by byl problém například v DOSu), ale je možné jednoduše napsat „:echo 1+4/2“ apod. Tyto operace jsou pouze celočíselné, pro mnoho úloh to však nemusí být omezující.
- Vim může jednoduše porovnat dva soubory a barevně zvýraznit odlišný text, tj. text změněný, přidaný či naopak odebraný. Toto barevně zvýrazněné „diff“ často používám právě při psaní strukturovaného textu, protože tento text si s sebou nosím a průběžně zpracovávám na několika místech/počítačích. Samozřejmě je možné použít CVS, ale pro několik málo souborů, jejichž obsah se mění, je to zbytečné a výstup je poměrně nepřehledný.
- Výhodných vlastností by se našlo více, já zde zmíním pouze možnost vyhledávání textu pomocí regulárních výrazů, protože se jedná o operaci, která se při práci s outline editorem velmi často používá. Například je možné každou zadanou poznámku „označkovat“ několika znaky (důležitost, kategorie apod.) a potom tyto značky v textu vyhledávat. Většina běžných outline editorů má sice zabudované vyhledávání, ale jedná se pouze o vyhledávání celého řetězce. Některé jednodušší editory nemají vyhledávání zabudované vůbec, takže se hodí pouze pro psaní krátkých poznámek.
3. TVO: The Vim Outliner
Již na několika místech tohoto seriálu jsem zmínil zkratku TVO. Tato zkratka znamená The Vim Outliner a nejde o nic jiného než o soubor několika maker a funkcí, která jsou pro editorvim dostupná. TVO je možno získat na adrese www.vim.org/scripts/script.php?script_id=517. Instalace tohoto balíku maker je velmi jednoduchá a je možné ji provést buď ručně (překopírováním souborů do příslušných adresářů), nebo pomocí dostupného instalačního skriptu. Ruční instalace je vhodná v případě, že jako správci systému chcete zpřístupnit TVO každému uživateli – potom je možné TVO nainstalovat přímo do adresáře se soubory vimu (například /usr/local/vim apod.).
Mezi základní vlastnosti TVO patří zejména dostupnost jak nových příkazů definovaných v TVO, tak i stávajících uživatelských a interních příkazů vimu. V případě, že by docházelo ke kolizím mezi uživatelsky definovanými příkazy a příkazy TVO, je možné jednoduše provést rekonfiguraci tak, aby TVO používalo jiný klávesový prefix.
TVO se ve vimu velmi dobře zabydlí a při práci s ním se modifikuje značná část textového editoru. Zejména se to týká již zmíněných příkazů, které jsou rozšířeny o dalších cca 30 operací, další příkazy vimu jsou modifikovány. Pokud je používána verze vimu s grafickým uživatelským rozhraním, je přidána celá jedna struktura menu s příkazy pro ovládání struktury textu. Také je přidáno několik tlačítek do toolbaru – viz screenshot obrazovky s TVO.
Obrázek 2: Nové GUI prvky při práci s TVO
Modifikace se však týká pouze zpracovávání (editace) souborů s koncovkou .otl, při práci s ostatními typy souborů k žádné změně původní funkcionality vimu nedochází.
Formát souboru s příponou .otl je přitom velmi jednoduchý. Jedná se o textový soubor, ve kterém je hierarchie každého řádku určena počtem znaků TAB na jeho začátku. Kromě toho je možné používat některé další znaky, které makrům TVO pomáhají při zpracování dokumentu. Jedná se například o znaky *, | a []. Bližší popis těchto speciálních znaků si uvedeme v dalším pokračování.
Obrázek 3: Text vytvořený a formátovaný pomocí TVO
4. Soubory, z nichž se TVO skládá
Celé TVO sestává z množství souborů, z nichž nejdůležitější jsou tyto:
- První soubor otl.vim by měl být uložen v adresáři s ostatními soubory s definicí syntaxe, například v podadresáři syntax. V tomto souboru je specifikováno několik syntaktických kategorií spolu s barvami a typy písma pro jednotlivé kategorie. Do tohoto souboru je vhodné zasahovat například při nutnosti přidání další syntaktické kategorie (telefonní číslo apod.) nebo při změně barvy nějaké kategorie/kategorií. Je nutno počítat s tím, že tyto změny budou mít globální charakter, uživatelé si však mohou ve svém souboru .vimr provést příslušné změny sami.
- Druhý soubor se stejným jménem otl.vim (samozřejmě s jiným obsahem) by měl být uložen v adresáři se zásuvnými moduly pro různé typy souborů, typicky se jedná o podadresář ftplugin. Z hlediska outline editoru se jedná o nejdůležitější soubor, neboť jsou v něm uloženy všechny funkce, makra, položky menu a také položky v toolbaru (pouze pro GUI verzi vimu), které se při práci s hierarchicky uspořádaným textem používají.
- V podadresáři plugin by se měl nacházet soubor filetype_otl.vim, v němž je možné globálně specifikovat některá nastavení TVO, která by si jinak uživatelé museli provádět sami ve svém konfiguračním souboru .vimrc resp. _vimrc.
- K TVO je samozřejmě dodána i dokumentace. Jeden soubor s dokumentací nazvaný jednoduše otl.txt se nahrává do podadresáře s nápovědou, tj. typicky doc/. V případě instalace TVO do původního adresáře vimu je tak nutné upravit soubor tags v adresáři s nápovědou přidáním řádku:
„‚tvo‘ otl.txt otluser.txt“
Při automatické instalaci není nutné tuto operaci provádět. Druhý soubor s dokumentací se jmenuje README.otl a jedná se mimo jiné o ukázku tvorby strukturovaného textu (viz koncovka tohoto dokumentu). - Mezi další instalované soubory s menší důležitostí patří bitmapy s ikonami zobrazenými na toolbaru. Ty jsou v závislosti na použité platformě uloženy buď ve formátu XPM (X-pixelmap), nebo ve formátu BMP. Pokud při práci s vim nepoužíváte toolbar (vzdálený přístup přes terminál, DOSová verze vimu, verze bez GUI apod.), není samozřejmě nutné tyto soubory instalovat.
5. Nahrávání klávesových zkratek a maker
Dále popsaný postup se provede pouze v případě, že je ve vimu otevírán nebo vytvářen soubor s koncovkou .otl. Pro jiné typy souborů platí původní pravidla vimu, případně pravidla vytvořená uživatelem.
Po korektní instalaci nadstavby TVO je (samozřejmě pouze při práci se soubory .otl) pomocí příkazů :*map vytvořeno poměrně velké množství klávesových zkratek, které je možné při práci s hierarchickým textem použít. Některé zkratky pouze rozšiřují stávájící zkratky editoru vim (například „\p“ nebo \k"), některé jsou však zcela nové a unikátní (jedná se například o příkazy „=“ a „-“).
Zkratky i další makra se nahrávají ze souboru otl.vim, který je ve většině případů umístěný v podadresáři ftplugin datového adresáře vimu (viz předchozí odstavec). Tento soubor je implicitně načten při otevření textových souborů s příponou .otl, ale toto implicitní chování je možné změnit v uživatelské konfiguraci editoru vim, tj. v souboru .vimrc (unixové systémy) resp. _vimrc (systémy MS-DOS a MS Windows).
6. Obsah dalšího pokračování
V dalším pokračování tohoto seriálu si popíšeme klávesové zkratky definované pro soubory .otl a také možnosti konfigurace a rozšíření TVO.