Hlavní navigace

Vim sedm - první část

Pavel Tišnovský 21. 6. 2005

V tomto dvojčlánku bych chtěl čtenáře seznámit s novou verzí známého textového editoru Vim, která - prozatím však pouze v testovací fázi - přináší několik podstatných vylepšení verzí předchozích. Jedná se zejména o integrovaný slovník a rozšíření interního skriptovacího jazyka o nové datové typy a jazykové konstrukce. Kromě toho jsou opraveny i některé nedostatky z předchozích verzí.

Obsah

1. Stručná historie textového editoru Vim

Motto
Na počátku počítačového světa bylo ČÍSLO. Čísla vyplňovala obrazovky terminálů, jejich dlouhé sloupce vypisovaly elektromechanické tiskárny. Záhadným výpisům mohli porozumět pouze zasvěcení. Počítače byly krmeny čísly, trávily je, dodávaly, braly a vyráběly další čísla. Dnes už se pořádně neví, kdy a kde se na obrazovce počítače poprvé objevilo SLOVO…
Zpravodaj Atari klubu 1/90, Václav Friedrich

Textový editor Vim není zajisté nutné čtenářům tohoto serveru dlouze představovat. Jedná se o editor, jehož ovládání je sice založeno na stařičkém unixovém editoru vi Billa Joye, kromě toho však přináší velké množství různých rozšíření, která jeho uživatelům v mnoha ohledech zpříjemňují život. Velmi pěkné povídání o tomto textovém editoru naleznete na adrese http://www.kit­.vslib.cz/~sa­trapa/docs/vim/(jed­ná se o text Pavla Satrapy). Ještě předtím, než se vrhneme na popis žhavých novinek sedmé verzi Vimu, si řekneme zajímavé informace z jeho dlouhé a bohaté historie, která začala již v roce 1988 na Amize.

1.1 Vim verze 1.0

Vše začalo programem nazvaným Vim 1.0. Tento program vytvořil v roce 1988 Bram Moolenaar na legendární Amize. Ve své podstatě se jednalo o prostou a k tomu ještě neúplnou imitaci původního textového editoru vi (visual), který byl používán na unixových systémech; v dnešní době se s původním vi můžeme setkat například na počítačích od firmy Sun Microsystems, ale i pro ně je samozřejmě možné Vim bez problémů přeložit. I prvotní nezkrácený název programu – Vi IMitation – napovídá, že šlo v prvé řadě o převod původního vi na Amigu. Bram sice začal svůj program stavět na cizích zdrojových kódech (jiného klonu editoru vi, konkrétně na programu SteVIe), později však došlo několikrát k přepsání celého editoru, takže z původních zdrojových kódů není nakonec použit ani byte. Ostatně jenom díky tomu mohla být pro Vim v dalších letech vytvořena nová licence postavená na bázi GPL.

1.2 Vim verze 1.14

První veřejně rozšířená verze textového editoru Vim nesla číslo 1.14. Stále se ještě jednalo o program vytvořený pouze pro Amigu, psal se totiž rok 1991 a tyto počítače před sebou měly ještě několik let úspěšného „komerčního” života. Tato verze již přinesla několik novinek a vylepšení oproti původnímu vi, zejména jiný způsob práce s operací undo.

1.3 Vim verze 1.22

Verze Vim 1.22 přinesla jednu zásadní změnu. Tato verze totiž byla s úspěchem portována na unixové systémy, čímž se kruh, jež začal u původního editoru vi, uzavřel. Původní editor vi tak získal na své vlastní platformě poměrně zdatného konkurenta (Emacs byl v té době editor zcela jiné kategorie) s mnoha výtečnými funkcemi, například vícestupňovou operací undo a možností pohybu kurzorem v režimu vkládání. Vzhledem k tomu, že se Vim v mnoha ohledech vylepšil, došlo také k jeho přejmenování: z původního Vi IMitation se po zásluze stává Vi IMproved.

1.4 Vim verze 3

Vim 3, jenž byl vydán v roce 1994, nabídl vůči předchozím verzím řadu vylepšení. Mezi ně patří zejména podpora pro více oken (prozatím rozdělených horizontálně, vertikální dělení se objevuje až v šesté verzi), integrovaný systém nápovědy a také větší úroveň kompatibility s původním vi, což se projevilo zejména při práci s původními makry. Úroveň kompatibility lze řídit příkazem :set cpoptions, takže rychlá práce s editorem je možná jak pro vi-veterány, tak i pro nové uživatele, kteří mohou snadno využít všechny nové vlastnosti tohoto editoru. Již v této chvíli začal býtVim používán v mnoha linuxových distribucích, kde postupně nahrazoval další klony editoru vi, například Elvise či Nvi.

1.5 Vim verze 4

Čtvrtá verze editoru Vim byla vydána v roce 1996. Mezi nejvýznamnější novinky patří možnost práce v grafickém uživatelském rozhraní, což přineslo oproti práci na terminálu některé přednosti, například rychlé operace se schránkou (clipboardem). Dále je k dispozici vylepšený systém nápovědy a v neposlední řadě také makrojazyk (stále se však nejedná o skriptovací jazyk známý z dalších verzí). Také je konečně možné změnit funkce kláves BackSpace a Delete rozumným způsobem (tj. nejen zdlouhavou editací databáze termcap).

1.6 Vim verze 5

Po dvou letech, tj. v roce 1998, byl vydán Vim 5.0. Největší novinkou bylo programovatelné zvýrazňování syntaxe. Se zvýrazněnou syntaxí se sice práce s editorem poněkud zpomalila (komfortní práce byla možná až na procesorech 486), ale programátorům (a nejen jim) značně ulehčila jejich práci. Objevuje se také skriptovací jazyk, který podporuje podmínky, smyčky apod. V tomto skriptovacím jazyku lze psát procedury a funkce, které reagují na nějaké události, například otevření či vytvoření souboru.

1.7 Vim verze 6

Šestá verze editoru Vim, která byla vydána až v roce 2001, přináší spoustu nových vlastností, které tento editor posouvají až na samotný vrchol programátorských editorů. Jmenujme například možnost vytváření vertikálních oken, podporu pro více jazyků (v každém okně může být text psaný jiným jazykem), podporu znaků kódovaných pomocí Unicode, „skládání” textu (folding), programovatelné zpracování chybových hlášení od překladačů, programovatelné odsazování (indent), barevně zvýrazněné změny v souborech (diff), rozsáhlý makrojazyk apod.

V roce 2002 došlo také (konkrétně ve verzi Vim 6.1) ke změně licence tak, aby byla více kompatibilní s GPL. To umožnilo použití Vimu jako prvotního editoru v mnoha linuxových i dalších distribucích. Poměrně málo známou, ale pro práci s texty důležitou vlastnost přinesla verze Vim 6.1.142. V této verzi je možné nastavit automatické přeformátování odstavců tak, jak to provádí textové procesory. Pro povolení či naopak zákaz automatického přeformátování je ve volbě :set formatoptions možné zapnout či vypnout příznaky a (automatické formátování) a w (způsob ukončování odstavců).

1.8 Vim verze 7

Vim 7, kterému je věnován tento článek, přinese mnoho dalších vlastností, které budou popsány v následujících odstavcích. Vzhledem k tomu, že finální verze 7 ještě není vytvořena, je možné o nových vlastnostech hlasovat na adrese www.Vim.org/spon­sor/vote_resul­ts.php.

V dalších kapitolách již budou popsány nejvýznačnější nové vlastnosti sedmé verze Vimu.

2. Automatická kontrola pravopisu – integrovaný speller

Z hlediska zpracování textů, například WWW stránek či zdrojových souborů pro (La)Tex, je bezpochyby nejdůležitější novou vlastností sedmé verze Vimu podpora automatické kontroly pravopisu. Celá věc pracuje stejným způsobem jako u moderních textových procesorů – ihned při psaní či editaci se změněné i nově napsané slovo hledá ve vybraném slovníku. Pokud slovo ve slovníku není nalezeno, je pod ním zobrazena červená vlnovka. Toto implicitní nastavení označení je samozřejmě možné změnit, což textové procesory neumožňují. Spolu s volbami :set textwidth=xx, :set formatoptions+=aw a :set spell se Vim přepne do režimu, který je velmi podobný práci textových procesorů, tj. text je při každé změně automaticky zalamován a je kontrolován pravopis. Druhou možností, jak se přiblížit práci textových procesorů, je nastavení voleb :set textwidth=0 a :set linebreak, kdy je celý odstavec v souboru reprezentován jedním řádkem a při editaci nejsou automaticky vkládány znaky pro konec řádku (první možnost zhruba odpovídá principu práce WordPerfectu blahé paměti, druhá možnost má blíže k Microsoft Wordu, zejména jeho DOSovským verzím).

Spolu s testovací verzí Vimu je dodáván pouze anglický slovník. Vzhledem k tomu, že slovníky jsou uloženy v optimalizované binární podobě, mohlo by se zdát, že jejich pořízení bude obtížné. Opak je pravdou, protože je možné využít slovník z OpenOffice.org, který se do výsledné binární podoby zkonvertuje. Návod, jakým způsobem se takový slovník vytvoří, je uveden v následujících kapitolách.

3. Vytvoření slovníku pro češtinu

V testovací verzi Vimu se samozřejmě ještě nenachází český slovník. Není však problém si tento slovník vytvořit. V dalším textu bude uveden podrobný návod na vytvoření a instalaci slovníku. Popíšeme si i způsob tvorby slov v odlišných kódováních.

3.1 Získání slovníku z OpenOffice.org

Prakticky nejjednodušší možností, jak zprovoznit český slovník pro kontrolu pravopisu, je převod (kompilace) slovníku dodávaného spolu s počeštěným programovým balíkem OpenOffice.org, který je dostupný na českém serveru www.openoffice­.cz. Při kompilaci, kterou provádí samotný Vim, se z původních textových souborů s koncovkami .aff a .dic vytvoří nový binární soubor s koncovkou .aff.

Pro český jazyk je zapotřebí získat soubory cs_cz.aff a cs_cz.dic. Tyto soubory se po instalaci OpenOffice.org nacházejí v podadresáři share/dict/ooo. Pro jistotu je před kompilací vhodné provést kopii původních slovníků do pracovního adresáře (zejména na strojích s menším množstvím paměti se kompilace nemusí podařit).

3.2 Kompilace slovníku do binární podoby

V pracovním adresáři s uloženými soubory cs_cz.aff a cs_cz.dic se následně spustí nový Vim, v němž se zadá následující příkaz:

:mkspell cs cs_cz 

První parametr příkazu určuje jméno zkompilovaného souboru (bez přípony), druhý parametr jména obou vstupních souborů (obě jména musí být samozřejmě stejná, až na rozdílnou příponu). Po zadání výše zmíněného příkazu se začne s kompilací slovníku. Ta je velmi náročná na paměť. Při převodu českého slovníku z OpenOffice.org 1.1.4 se při kompilaci alokovala paměť o velikosti přes 150 MB, následná komprimace je již méně náročná – „pouhých“ 60 MB. Výsledkem kompilace a následné komprimace je soubor cs.xxx.spl (místo písmen xxx je uvedeno aktuální kódování slovníku), který je zapotřebí umístit do sdíleného adresáře Vimu, v němž je vytvořen podadresář spell. Sdílený adresář se ve Vimu dá jednoduše vypsat příkazem:

:echo $VimRuntime 

3.3 Použití slovníku

Použití nově vytvořeného slovníku je velmi jednoduché. Po načtení textového souboru do Vimu se buď ručně, nebo přes konfigurační soubor .vimrc musí zadat následující příkazy:

:set spelllang=cs
:set spell 

Popřípadě lze ještě specifikovat soubor se slovníkem pomocí příkazu:

:set spellfile=jméno_souboru 

Pro zvýraznění neznámých nebo méně často používaných slov se používá zvýraznění definované syntaktickými skupinami (kategoriemi) SpellBad, SpellRare a SpellLocal. Výpis či nové nastavení zvýrazňování těchto skupin se provede příkazy:

:hi SpellBad
:hi SpellRare
:hi SpellLocal 

Při výpisu původního nastavení si všimněte, že jsou použity dva nové atributy: gui=undercurl a guisb=Red. Prvním atributem je specifikováno vlnkovité podtržení, druhým atributem je nastavena barva tohoto podtržení. Tyto atributy je samozřejmě možné použít i v jiných syntaktických kategoriích, například při práci se zdrojovými texty programů pro syntaktickou skupinu Error.

3.4 Vytvoření slovníku pro jiné kódování (znakovou sadu)

V současné testovací verzi má Vim problémy s použitím slovníku při práci s textem, který je kódován pomocí jiné normy, než je ISO 8859–2. Ukážeme si, jakým způsobem je možné připravit slovníky v jiném kódování, konkrétně v kódování CP1250 (Windows 1250). Postup je poměrně jednoduchý, zejména díky tomu, že slovníky z OpenOffice.org jsou uloženy v ASCII podobě:

  1. Nejprve je zapotřebí provést převod slovníků OpenOffice.org z původního kódování dle normy ISO 8859–2. Pro tento účel je možné použít například známou utilitu cstocs nebo samotný Vim (viz volby :set fileencoding a :set fileencodings).
  2. Posléze je nutné přepsat první řádek v textovém souboru cs_cz.aff tak, aby se místo textu „SET ISO8859–2” objevil text „SET CP1250”.
  3. Na takto upravené slovníky lze použít výše zmíněný postup tvořený příkazem :mkspell cs cs_cz. Název nově vytvořeného binárního souboru však již nebude cs.iso8859–2.spl, ale cs.cp1250.spl. Tento soubor se opět nakopíruje do podadresáře spell.
  4. Nyní se podle nastaveného kódování editovaných souborů zvolí správný slovník. Pokud je nutné provést nějakou korekci (špatně zvolený slovník), zařídí ji příkaz :set spelllang.

4. Nové vlastnosti integrovaného skriptovacího jazyka Vimu

Významné novinky se objevily i ve skriptovacím jazyku, který se svými schopnostmi dostal na zcela novou úroveň abstrakce. Skriptovací jazyk je obohacen o nové strukturované datové typy a několik příkazů, které s těmito typy mohou pracovat. Kromě toho se objevují i „zkrácené“ verze některých operátorů tak, jak je známe z programovacích jazyků C, C++ a Java: například místo příkazu :let a=a+10 je možné napsat: :let a+=10. To samozřejmě platí i pro operátor konkatenace řetězců (ten se ve výše zmíněných jazycích nevyskytuje, alespoň ne ve stejné podobě) apod.

5. Obsah dalšího pokračování

V dalším pokračování tohoto (bohudík pouze dvoudílného) seriálu si podrobně popíšeme nové vlastnosti skriptovacího jazyka, zejména význam všech nových datových typů. Samozřejmě nebudou chybět ukázky skriptů, které nové prvky jazyka využijí.

Našli jste v článku chybu?

27. 6. 2005 14:48

Aha, takhle já jsem ispell nastavený neměl - kontrola se prováděla až na požádání, dejme tamu na klávesovou zkratku, nebo při opuštění vkládacího režimu. Pokud máte externí speller (tj. ispell/aspell atd.) nastavený tak, že se při _jakékoli_ změně textu na tu změněnou část zavolá, opravdu asi nebude - tedy kromě rychlosti - mezi interním a externím spellerem rozdíl.
Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Root.cz: Telegram spustil anonymní blog Telegraph

Telegram spustil anonymní blog Telegraph

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

120na80.cz: Vitaminová abeceda

Vitaminová abeceda

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: Sat novinky: Fransat UHD Demo

Sat novinky: Fransat UHD Demo