Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

VIM na plný výkon (4)

Kolekce rad a nápadů pro snadnější pořizování zdrojových textů všeho druhu. V tomto dílu se zaměříme na nastavování chování VIMu podle typu editovaného souboru. Řeč bude o tzv. Filetype Plugins.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Vítám vás po delší době u dalšího pokračování seriálu o VIMu a jeho ladění na plný výkon a podle potřeb každého z nás. V předchozích kapitolách jsme se zabývali především globálními nastaveními. VIM však dovoluje uživatelům jednoduše definovat nastavení podle typu souboru. Stará se o to vlastnost zvaná Filetype Plugins.

Filetype Plugins

Mechanismus Filetype Plugins se zapíná volbou

filetype plugin on

kterou bych doporučoval vložit do vašeho .vimrc souboru (pokud ji tam už nemáte). Poté si můžete vytvořit adresář ~/.vim/ftplugin a do něj ukládat soubory s nastaveními specifickými pro konkrétní typy souborů. Názvy konfiguračních souborů v tomto adresáři musí odpovídat schématu <název>.vim, kde <název> je označení typu, kterého se konfigurace týká. Můžete tedy směle vytvářet např. souboryc.vim, java.vim nebo html.vim a do nich vkládat nastavení pro příslušné druhy souborů (v tomto případě pro jazyk C, Javu a HTML stránky).

Z minulých dílů už víme, že všechna nastavení uložená v .vimrc a v podadresáři ~/.vim/ jsou lokální pro každého uživatele. Kromě toho pochopitelně existují i globální nastavení, která jsou stejná pro všechny uživatele VIMu v systému.

Co se Filetype Plugins týče, situace je následující. VIM zpracovává nejprve soubory ve vašem domovském adresáři (~/.vim/ftplugin/) a teprve poté přistoupí k vykonání globálních Filetype Plugins (/usr/share/vim/ftplu­gin/). To může mít za následek jednu nepříjemnost, a to, že globální filetype pluginy mohou předefinovat vaše osobní nastavení. Abyste se proti tomu ubránili, můžete do svých filetype pluginů přidat řádek let b:did_ftplugin = 1 nebo rovnou celý globální plugin zkopírovat do ~/.vim/ftplugin a upravit, jak je ctěná libost. (Zmiňovaný příkaz let b:did_ftplugin = 1 zakáže nahrávání dalšího filetype pluginu pro aktuální buffer.)

Druhou možností, kam umístit náš filetype plugin, je podadresář ~/.vim/after/ftplu­gin/. V takovém případě bude náš plugin nahrán až po globálních filetype pluginech. b:did_ftplugin je v tomto případě ignorováno.

Pro více informací zkuste ve VIMu :help filetype-plugins.

Jistě už teď sami vidíte širé lány použití tohoto mechanismu. Pojďme si přesto ukázat, jaké jsou jeho konkrétní možnosti.

Psaní HTML

Píšete ve VIMu HTML stránky? (Jestli ne, tak to zkuste. Je to príma. :-) Jestli ano, jistě i vás irituje neustálé psaní &amp; místo &, přepínání na anglickou klávesnici jen proto, abyste napsali úhlové závorky kolem HTML značky atd. Na obojí je bohudík lék, jenž se opírá právě o zmiňované filetype plugins.

Založte si soubor ~/.vim/ftplugin/html­.vim a zapište do něj následující magický text:

imap <LocalLeader>< &lt;
imap <LocalLeader>> &gt;
imap <LocalLeader>& &amp;
imap <LocalLeader>n &nbsp; 

Příkaz konkrétně říká, že chceme vytvořit mapování fungující jen v INSERT módu (imap) na klávesy ,< (v případě, že je tzv. LocalLeader nastaven na , – viz dále) tak, že po jejich stisku se ve skutečnosti provede akce odpovídající stisknutí kláves napsaných v poslední části příkazu (tj. &lt; – napsání tohoto textu).

Aby vše správně fungovalo, musíte mít nějak nastaven tzv. lokální předřaďovač (LocalLeader). Dělá se to třeba následujícím řádkem v ~/.vimrc souboru:

let maplocalleader = "," 

Po všech těchto krocích by měla fungovat při psaní HTML souborů (přímo v INSERT módu) makra ,< (tj. čárka následovaná znakem „menší než“), ,> a ,& tak, že do textu vloží patřičné entity &lt;, &gt; a &amp;.

Abyste se kvůli spuštění těchto maker nemuseli přepínat do anglické klávesnice, můžete si do ~/.vim/ftplugin/html­.vim přidat ještě následující trojici příkazů:

imap <LocalLeader>? &lt;
imap <LocalLeader>: &gt;
imap <LocalLeader>7 &amp; 

Neustálé vypisování počátečních a ukončovacích HTML značek je rovněž velmi únavné. Někdo to řeší tak, že si pro všechny myslitelné HTML tagy vytvoří samostatná makra a pak píše např. ,1 místo <h1></h1>, ,p místo <p> a tak dále. Mimochodem, je to velmi jednoduché – pro trénink začínajících VIMařů uvedu alespoň jednu definici makra:

imap <LocalLeader>p   <p><CR>< 

Její použití způsobí, že kdykoliv v INSERT módu napíšete rychle za sebou ,p, vloží se do textu značka pro nový odstavec a odřádkuje se.

Jistě jste si v předchozí definici makra všimli zvláštního řetězce <CR>. Právě takovým způsobem se do maker zapisují stisky speciálních kláves. <CR> například znamená stisk klávesy Enter, <Esc> stisk klávesy Esc apod.

Nevíte-li, jaký řetězec dané klávese odpovídá, můžete si pomoci stiskem CTRL-V a dané klávesy. Tak např. stisk CTRL-V a šipky nahoru vloží do textu řetězec <Up> apod. (Uvedená kombinace kláves funguje samozřejmě pouze mimo normální režim. V módu NORMAL má význam sloupcových bloků.)

Vraťme se ale k psaní HTML kódu. Než vytvářet makro pro každou HTML značku zvlášť, zdá se mi lepší zavedení jediného univerzálního ma­kra:

imap <F6> <></><Esc>5hdiwp3lpT>i 

Makro funguje takto: jednoduše píšete text stránky, jak jste zvyklí, a když náhodou potřebujete vložit nějaký HTML tag, napíšete jeho název a stisknete klávesu F6. Z napsaného slova se vytvoří párová HTML značka a kurzor se nastaví doprostřed. Zadáte-li např. code a stisknete klávesu F6, VIM za vás díky tomuto makru vygeneruje značky<code></code> s kurzorem uprostřed.

Předchozí makro vypadá na první pohled poněkud zběsile, ale ve skutečnosti neobsahuje žádné neobvyklé příkazy. Pojďme se na něj podívat podrobněji. Jak bylo řečeno, makro předpokládá, že bylo zavoláno těsně za nějakým napsaným slovem. Nejprve se vypíšou prázdné úhlové závorky (<></>) a přejde se do normálního režimu (<Esc>). Příkaz 5h znamená posunutí kurzoru o pět sloupců vlevo, tj. na poslední znak slova před úhlovými závorkami. Příkaz diw je už trochu méně obvyklý. Znamená Delete Inner Word, tj. vymaž slovo pod kurzorem. Tímto příkazem se také kurzor ocitne na prvním znaku <, takže příkaz p vloží vymazané slovo dovnitř úhlových závorek. Následuje posunutí o tři sloupce vpravo (3l), opětovné vložení vymazaného slova mezi poslední úhlové závorky (p), návrat zpět za první > (T>) a vstup do INSERT módu (i). Ufff.

Někdy se ale přece jenom hodí jisté speciality:

imap <LocalLeader>a   <a href=""></a><Esc>5hi
imap <LocalLeader>tab <table><CR><tr><CR><td></td><CR></tr><CR></table>
imap <LocalLeader>img <img src="" alt="" border="0"><Esc>19hi 

…s tímto významem:

Tabulka č. 584
Makro  Vygeneruje se
,a <a href=""><a> a kurzor se nastaví mezi uvozovky
,tab kostra tabulky
,img <img src="" alt="" border=„0“> a kurzor se nastaví mezi uvozovky atributu src

Pro vkládání odkazů mám ještě jedno makro:

davame_internetu_obsah
       
imap <LocalLeader>A <Esc>yiWi<a href="http://<Esc>Ea"></a><Esc>3hP4la 

Po napsání např. www.root.cz a stisku ,A se vygeneruje: <a href=„http­://www.root.cz“>www­.root.cz</a>.

Pokračování příště…

Michal Burda

Michal Burda

Michal Burda vystudoval informatiku a aplikovanou matematiku a nyní pracuje na Ostravské univerzitě jako odborný asistent. Zajímá se o data mining, Javu a Linux.

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Ohodnoťte jako ve škole:
Průměrná známka 3,11

Přehled názorů

hmmm
Pepa 13. 7. 2004 01:24
Nový
preklep
Phoenix 13. 7. 2004 08:01
Nový
Praxe
máca 13. 7. 2004 08:15
Nový
├ 
Re: Praxe
Zdenek Burda 13. 7. 2004 08:47
Nový
├ 
Re: Praxe
ch-in-A 13. 7. 2004 09:45
Nový
│
└ 
Re: Praxe
George 13. 7. 2004 18:51
Nový
├ 
Re: Praxe
matous cervenka 13. 7. 2004 09:46
Nový
├ 
Re: Praxe
Pavel Tišnovský 13. 7. 2004 09:58
Nový
│
└ 
Re: Praxe
Zdeněk Vráblík 13. 7. 2004 13:21
Nový
│
 
└ 
Re: Praxe
Pavel Tišnovský 13. 7. 2004 13:58
Nový
│
 
 
└ 
Re: Praxe
Zdeněk Vráblík 13. 7. 2004 16:22
Nový
│
 
 
 
└ 
Re: Praxe
Pavel Tišnovský 14. 7. 2004 07:20
Nový
└ 
Re: Praxe
máca 13. 7. 2004 11:46
Nový
 
└ 
Re: Praxe
matous cervenka 13. 7. 2004 11:59
Nový
 
 
├ 
Re: Praxe
Petr Mach 13. 7. 2004 19:32
Nový
 
 
└ 
Re: Praxe
Petr Mach 13. 7. 2004 19:34
Nový
 
 
 
└ 
Re: Praxe
matous cervenka 14. 7. 2004 08:54
Nový
 
 
 
 
└ 
Re: Praxe
Petr Mach 14. 7. 2004 16:16
Nový
XML-plugin
vlk 13. 7. 2004 08:24
Nový
vim-latex
jaro 13. 7. 2004 08:52
Nový
filetype plugins vs .vimrc
Pavel Tišnovský 13. 7. 2004 10:08
Nový
Vyborny !
Petr Ruzicka 13. 7. 2004 10:21
Nový
tabulkty
skoub 13. 7. 2004 11:59
Nový
vice souboru v jednom okne
skoub 13. 7. 2004 12:05
Nový
├ 
Re: vice souboru v jednom okne
mpts 13. 7. 2004 13:37
Nový
├ 
Re: vice souboru v jednom okne
mpts 13. 7. 2004 13:47
Nový
└ 
Re: vice souboru v jednom okne
znouza 13. 7. 2004 15:12
Nový
Tradičně
mpts 13. 7. 2004 13:40
Nový
No nevím...
lzap 13. 7. 2004 15:01
Nový
off topic
Chappi 13. 7. 2004 20:43
Nový
└ 
Re: off topic
michal 13. 7. 2004 23:46
Nový
 
├ 
Re: off topic
mpts 14. 7. 2004 11:19
Nový
 
└ 
Re: off topic
Chappi 14. 7. 2004 13:44
Nový
 
 
└ 
Re: off topic
Chappi 14. 7. 2004 13:45
Nový
Pomale pripojeni nebo lagujici sit
Dalibor Straka 15. 7. 2004 13:37
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem