Užitečné skripty a pluginy pro textový editor Vim (5.část)

14. 4. 2015
Doba čtení: 21 minut

Sdílet

I v páté části článku o užitečných skriptech a pluginech rozšiřujících schopnosti textového editoru Vim se budeme zabývat převážně moduly, které zpříjemní život vývojářům. Některé dále popsané pluginy jsou univerzální (Matchit, Surround, snipMate), další jsou již zaměřeny na jednotlivé programovací jazyky (vim-fireplace, c.vim).

Obsah

1. Užitečné skripty a pluginy pro textový editor Vim (5.část)

2. Plugin Matchit

   2.1 Popis pluginu Matchit

   2.2 Instalace pluginu Matchit

   2.3 Použití pluginu Matchit

3. Plugin Surround

   3.1 Popis pluginu Surround

   3.2 Instalace pluginu Surround

   3.3 Použití pluginu Surround

4. Plugin snipMate

   4.1 Popis pluginu snipMate

   4.2 Instalace pluginu snipMate

   4.3 Použití pluginu snipMate

   4.4 Ukázka použití pluginu snipMate pro céčko

   4.5 Ukázka použití pluginu snipMate pro HTML

   4.6 Ukázka použití pluginu snipMate pro Javu

5. Plugin vim-fireplace

   5.1 Popis pluginu vim-fireplace

   5.2 Instalace pluginu vim-fireplace

   5.3 Použití pluginu vim-fireplace

6. Plugin c.vim

   6.1 Popis pluginu c.vim

   6.2 Instalace pluginu c.vim

   6.3 Použití pluginu c.vim

7. Odkazy na předchozí části článku

8. Odkazy na Internetu

1. Užitečné skripty a pluginy pro textový editor Vim (5.část)

Podobně jako v předchozí části článku o užitečných pluginech vytvořených pro textový editor Vim se i dnes budeme zabývat přídavnými moduly určenými především pro vývojáře popř. pro ty uživatele, kteří využívají některý značkovací jazyk typu XML či HTML. Nejprve se zmíníme o dvojici univerzálních modulů nazvaných MatchitSurround, dále si popíšeme přídavný modul nazvaný snipMate, což je jeden z nejpopulárnějších vimovských pluginů vůbec, a následně se zmíníme o modulu nazvaném vim-fireplace a taktéž o modulu s jednoduchým názvem c.vim. Předposlední zmíněný modul vim-fireplace je určen pro programátory využívající jazyk Clojure, poslední modul c.vim pak může zjednodušit a urychlit práci vývojářům v programovacím jazyku C.

Obrázek 1: Obsah adresáře ~/.vim/bundle s některými dnes popisovanými pluginy otevřený přímo ve Vimu (plugin Netrw).

2. Plugin Matchit

2.1 Popis pluginu Matchit

Před popisem dnešního prvního modulu s názvem Matchit bude vhodné si připomenout, že textový editor Vim obsahuje několik desítek příkazů určených pro pohyb kurzoru, přičemž tyto příkazy lze snadno kombinovat s editačními operacemi (yank, change, delete) popř. operacemi pro modifikaci textu (změna znaků na velká písmena atd. atd.). Kromě jednoduchých příkazů pro pohyb kurzoru typu „posun o znak doleva“, „posun o slovo doprava“ ve Vimu najdeme i složitější příkazy. Mezi tyto příkazy patří i zdánlivě primitivní příkaz %, který je však ve skutečnosti velmi užitečný. Tento příkaz je součástí původního textového editoru vi, ovšem pro potřeby Vimu byl v několika ohledech vylepšen. V čem však vlastně spočívá užitečnost tohoto příkazu při editaci zdrojových kódů? Tento příkaz dokáže najít na aktuálně editovaném řádku takzvaný párový znak umístěný na místě kurzoru či napravo od kurzoru a posléze skočí na opačný párový znak. Tento druhý párový znak se může nacházet jak napravo, tak i nalevo od kurzoru, popř. na zcela jiném řádku v editovaném souboru. Vzhledem k tomu, že se jedná o příkaz přesunu kurzoru, lze ho kombinovat s příkazy d, c, > atd.

Obrázek 2: Pozice textového kurzoru před zavoláním příkazu %.

Jako párové znaky jsou většinou nastaveny tři druhy závorek – kulaté závorky (), hranaté závorky [] a složené závorky {}. Ovšem s využitím volby matchpairs lze nastavit i další párové znaky, například ostré závorky <>:

:set matchpairs=(:),[:],{:},<:>

V současné verzi textového editoru Vim je nastavení volby matchpairs skutečně omezeno na dvojici jednotlivých znaků, což je ovšem pouze zdánlivé omezení, které lze lehce napravit – a to právě použitím pluginu Matchit.

Obrázek 3: Po zadání příkazu % je napravo od kurzoru nalezen první párový znak, kterým je v tomto případě levá složená závorka {. Posléze editor nalezne druhý párový znak (je na řádku 19) a přesune se na něj.

Obrázek 4: Opětovné zadání příkazu % způsobí návrat na otevírací složenou závorku {.

2.2 Instalace pluginu Matchit

Instalace pluginu Matchit je zcela jednoduchá a většinou nezabere prakticky žádný čas – tento plugin je totiž součástí instalace Vimu, přesněji řečeno (alespoň ve většině distribucí) je modul součástí balíčku vim-runtime. Ostatně se o tom můžeme snadno přesvědčit, například na distribucích založených na .deb balíčcích:

dpkg-query -L vim-runtime |grep match
/usr/share/vim/vim74/plugin/matchparen.vim
/usr/share/vim/vim74/macros/matchit.vim
/usr/share/vim/vim74/macros/matchit.txt
/usr/share/vim/addons/plugin/matchit.vim
/usr/share/vim/addons/doc/matchit.txt

Instalace je popsaná přímo v nápovědě Vimu (vše se spouští přímo z editoru, lze samozřejmě i na příkazové řádce po vynechání prvních dvou znaků):

:!mkdir ~/.vim
:!mkdir ~/.vim/plugin
:!cp $VIMRUNTIME/macros/matchit.vim ~/.vim/plugin
:!mkdir ~/.vim/doc
:!cp $VIMRUNTIME/macros/matchit.txt ~/.vim/doc
:helptags ~/.vim/doc

Obrázek 5: Modul Matchit se instaluje prostým zkopírováním dvou souborů do adresáře ~/.vim.

2.3 Použití pluginu Matchit

Po otevření souboru, jehož typ je v modulu Matchit nakonfigurován, lze použít následující příkazy:

# Příkaz Význam
1 % doskok na párovou sekvenci znaků (if-endif atd.)
2 g% podobné předchozímu příkazu, ale doskakuje se v opačném pořadí (má význam u trojice, čtveřice apod. ale logicky ne u páru)
3 a% v režimu výběru umožňuje vybrat celý blok. Kurzor se umístí na párový znak/sekvenci a stlačí se va%

Obrázek 6: Nápověda k modulu Matchit.

Sekvence znaků, které se mají považovat za párové, lze nadefinovat v proměnné nazvané b:match_words. Podívejme se na příklad převzatý z nápovědy, který umožňuje pro nějaký programovací jazyk (podobný BASHi) deklarovat skoky mezi dvojící příkazů ifendif, whileendwhile atd. Lze vytvářet i složitější konstrukce, například rozlišit trojici if-else-endif apod.:

:let b:match_words = '\<if\>:\<endif\>,'
        \ . '\<while\>:\<continue\>:\<break\>:\<endwhile\>'

U HTML souborů je obsah této proměnné následující (ukazuje se, že lze použít i regulární výrazy):

<:>,<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/
\1>,<:>,<\@<=!\[CDATA\[:]]>,<\@<=!--:-->,<\@<=?\k\+:?>,<\@<=\([^ \t>/]\+\)\%(\s\+[^>]*\%([^/]>\|$\)\|>\|$\):<\@<=/\1>,<\@<=\%([^ \t>/]\+\)\%(\s
\+[^/>]*\|$\):/>

Obrázek 7: Kromě příkazu % jsou v modulu Matchit deklarovány i další příkazy – viz úryvek ze zdrojového kódu tohoto skriptu.

Konfigurace u céčkových souborů je jednodušší; můžeme zde vidět podporu pro doskoky na makra preprocesoru:

(:),{:},[:],^\s*#\s*if\(\|def\|ndef\)\>:^\s*#\s*elif\>:^\s*#\s*else\>:^\s*#\s*endif\>

3. Plugin Surround

3.1 Popis pluginu Surround

Druhý modul naprogramovaný pro textový editor Vim, který si v dnešním článku popíšeme, v určitém ohledu doplňuje modul předchozí. Zatímco výše popsaný modul Matchit slouží ke skokům na párové znaky popř. tagy (či jiné vhodným způsobem definované textové objekty), slouží modul Surround k přidání, ubrání či modifikaci „obalových“ řetězců okolo vybraného textu – což většinou bývají právě párové znaky či tagy. Asi nejjednodušším příkladem je výběr nějakého textu Hello world! a přidání uvozovek před a za tento text, takže výsledkem bude „Hello world!“. Možnosti modulu Surround jsou však ve skutečnosti mnohem širší a teprve při jeho delším používání si uživatel uvědomí, jak často vlastně potřebuje „obalit“ nějakou část textu dalšími znaky – může se jednat o aritmetický výraz se závorkami, výraz představující výpočet indexu do pole či obalení textu značkou <div> v HTML či XML.

Obrázek 8: Nápověda k modulu Surround.

3.2 Instalace pluginu Surround

Pro instalaci modulu Surround lze jednoduše použít Git, protože zdrojové kódy jsou uloženy na GitHubu, podobně jako tomu bylo u mnoha pluginů popsaných minule a taktéž předminule:

cd ~/.vim/bundle
git clone https://github.com/tpope/vim-surround
Cloning into 'vim-surround'...
remote: Counting objects: 389, done.
remote: Total 389 (delta 0), reused 0 (delta 0), pack-reused 389
Receiving objects: 100% (389/389), 103.23 KiB | 0 bytes/s, done.
Resolving deltas: 100% (117/117), done.
Checking connectivity... done.

Výsledná struktura adresáře ~/.vim/ by nyní měla vypadat následovně (opět s přihlédnutím k tomu, že už můžete mít nainstalovány i další pluginy):

.
├── autoload
├── bundle
│   ├── calendar
│   │   ├── autoload
│   │   ├── doc
│   │   └── plugin
│   ├── ctrlp.vim
│   │   ├── autoload
│   │   │   └── ctrlp
│   │   ├── doc
│   │   └── plugin
│   └── vim-surround
│       ├── doc
│       └── plugin
├── doc
├── plugin
└── spell

Žádnou další konfiguraci není nutné provést.

Obrázek 9: Zdrojový soubor před použitím příkazů definovaných v modulu Surround. Povšimněte si, kde se nachází textový kurzor.

Obrázek 10: Výsledek příkazu ysw" („obal text obsahující celé slovo mezi uvozovky“).

Obrázek 11: Výsledek příkazu cs"' (nahraď uvozovky za apostrofy).

3.3 Použití pluginu Surround

Plugin Surround nabízí několik nových operací, které mohou být poměrně komplexní. Podívejme se na následující tabulku s příklady:

# Příkaz Význam
1 ds" vymaže uvozovky okolo textu (v němž se nachází kurzor)
2 ds( vymaže kulaté závorky okolo textu (levou i pravou)
3 ds) dtto
4 ds[ vymaže hranaté závorky okolo textu
5 dst vymaže tag okolo textu (platné pro XML a HTML)
6 ysaw" zapíše uvozovky okolo slova („aw“ znamená „a word“)
7 ysaw( zapíše pravou a levou kulatou závorku okolo slova („aw“ znamená „a word“)
8 ysW( text od kurzoru až po další slovo bude uzavřen mezi kulaté závorky
9 ysip<div> celý textový odstavec se umístí mezi párové značky <div> a </div>
10 yssB celý řádek se umístí do složených závorek
11 cs"' nahradí obalové uvozovky za apostrofy
12 cs'<strong> nahradí apostrofy okolo textu za párovou značku <strong> a </strong>

Obrázek 12: Zdrojový soubor před použitím příkazů definovaných v modulu Surround. Povšimněte si, kde se nachází textový kurzor.

Z výše uvedených příkladů lze odvodit některá pravidla pro jejich tvorbu:

  1. ds je začátek příkazu pro smazání obalových znaků (rozpoznávají se párové závorky)
  2. ys je začátek příkazu pro vložení obalových znaků
  3. cs je začátek příkazu pro změnu obalových znaků (rozpoznávají se párové závorky)
  4. Příkazy ds vyžadují zadání znaku pro smazání, lze zadat i „t“, což je alias pro tag
  5. Příkazy cs vyžadují zadání znaku, který se má změnit a zadání nové obalové sekvence
  6. Příkazy ys vyžadují příkaz pro pohyb (motion commands), podporují textové objekty (slovo, věta, blok)
  7. Příkazy ys podporují aliasy pro obalové znaky: b=), B=}, r=] a a=>

Navíc je možné v režimu vizuálního výběru (visual mode použít příkaz S, který se bude chovat podobně jako ys.

Obrázek 13: Výsledek příkazu yst{( („obal text až po následující levou složenou závorku mezi kulaté závorky“).

4. Plugin snipMate

4.1 Popis pluginu snipMate

V mnoha dnes používaných (a i díky tomu populárních) programátorských textových editorech i integrovaných vývojových prostředích mají uživatelé k dispozici nástroj umožňující vkládání předpřipravených jazykových konstrukcí (code snippets) do editovaných zdrojových kódů, a to buď s využitím klávesových zkratek nebo volbou požadované konstrukce z nabídnutého seznamu či z menu. Může se jednat například o kostry počítaných programových smyček, do nichž se pouze doplní název řídicí proměnné společně s dolním a horním limitem smyčky, kostry deklarace tříd a metod atd. Podobné předpřipravené konstrukce lze samozřejmě používat i při editaci souborů využívajících různé značkovací jazyky, ať již se jedná o HTML či XML, nebo o (La)TeX. Textový editor Vim ve své základní variantě podobný nástroj sice neobsahuje, ovšem díky zabudovanému skriptovacímu jazyku VimScript není velkým problémem si podobnou funkcionalitu doprogramovat.

Obrázek 14: Ukázka syntaxe konfiguračních šablon používaných modulem TextMate. Tato konkrétní šablona obsahuje kostry příkazů používaných v programovacích jazycích C a C++.

Ovšem ruční vytváření podobných funkcí pro všechny možné jazykové konstrukce by bylo poměrně pracné a současně také poněkud nepřehledné. Vzhledem k tomu, že práce s code snippets je vyžadována prakticky všemi uživateli textového editoru Vim, ať už přímo vývojáři, tak i uživateli vytvářejícími HTML stránky nebo pracujícími s různými soubory XML, bylo jen otázkou času, kdy se objeví vhodný (prakticky) univerzální modul umožňující s code snippets snadno manipulovat. Ve skutečnosti je těchto modulů k dispozici celá řada, ovšem pravděpodobně nejpoužívanějším pluginem je snipMate. Název tohoto modulu je inspirovaný editorem TextMate, který je poměrně rozšířený mezi komunitou vývojářů pracujících s Mac OS.

Obrázek 15: Ukázka šablony s kostrami příkazů používaných ve Vim Scriptu.

4.2 Instalace pluginu snipMate

Pro instalaci modulu snipMate se opět využije Git:

cd ~/.vim/bundle
git clone https://github.com/msanders/snipmate.vim
Cloning into 'snipmate.vim'...
remote: Counting objects: 791, done.
remote: Total 791 (delta 0), reused 0 (delta 0), pack-reused 791
Receiving objects: 100% (791/791), 199.95 KiB | 0 bytes/s, done.
Resolving deltas: 100% (265/265), done.
Checking connectivity... done.

Výsledná struktura adresáře cd ~/.vim/bundle může vypadat následovně:

.
├── autoload
├── bundle
│   ├── calendar
│   │   ├── autoload
│   │   ├── doc
│   │   └── plugin
│   ├── ctrlp.vim
│   │   ├── autoload
│   │   │   └── ctrlp
│   │   ├── doc
│   │   └── plugin
│   ├── SearchComplete
│   │   └── plugin
│   ├── snipmate.vim
│   │   ├── after
│   │   │   └── plugin
│   │   ├── autoload
│   │   ├── doc
│   │   ├── ftplugin
│   │   ├── plugin
│   │   ├── snippets
│   │   └── syntax
│   └── vim-fugitive
│       ├── doc
│       └── plugin
└── spell

Modul snipMate lze používat ihned po znovuspuštění textového editoru Vim.

Obrázek 16: Vytvoření nové funkce v programovacím jazyku Java pomocí šablony.

Obrázek 17: Pomocí klávesy Tab lze postupně doplnit název funkce, její návratovou hodnotu, parametry i seznam vyhazovaných výjimek.

4.3 Použití pluginu snipMate

Práce s modulem snipMate je velmi jednoduchá. Postačuje si zjistit (popř. i změnit) zkratky používané tímto modulem pro daný programovací jazyk. Například pro jazyky C, C++ či Java existuje zkratka for určená pro poloautomatické vytvoření programové smyčky. Při psaní kódu tedy stačí napsat trojici znaků „for“ a ihned poté stlačit klávesu Tab. Ihned poté dojde k vložení kostry smyčky do editovaného textu, to však není vše, protože opětovným stlačováním klávesy Tab je možné se přesouvat na variabilní (tj. editovatelné) části smyčky, zejména na jméno řídicí proměnné, limity cyklu a samozřejmě i na prozatím prázdné tělo smyčky. Zajímavé přitom je, že při editaci jména řídicí proměnné se toto jméno současně mění na všech třech místech, tj. jak v inicializačním příkazu (přiřazení počáteční hodnoty do proměnné), tak i v podmínce pro ukončení smyčky a v iteračním příkazu. Celý postup vytvoření smyčky je ve skutečnosti velmi jednoduchý, jak je to ostatně patrné z následující sekvence screenshotů:

4.4 Ukázka použití pluginu snipMate pro céčko

Obrázek 18: Vytvoření počítané smyčky for v programovacím jazyce C pomocí modulu snipMate: zápis textu „for“.

Obrázek 19: Po stlačení klávesy Tab se smyčka vytvoří a kurzor se přesune na první variabilní (editovatelnou) položku.

Obrázek 20: Po dalším stlačení klávesy Tab lze přejmenovat řídicí proměnnou smyčky.

Obrázek 21: Po čtvrtém stlačení klávesy Tab se kurzor přemístí do těla smyčky.

4.5 Ukázka použití pluginu snipMate pro HTML

Na další pětici screenshotů je ukázána tvorba HTML stránky, přičemž uživatel napíše pouze čtveřici slov html, head, bodymovie oddělených Taby:

Obrázek 22: Začátek tvorby HTML stránky – zápis prvního slova html.

Obrázek 23: Začátek tvorby HTML stránky – stlačení klávesy Tab a zápis druhého slova head.

Obrázek 24: Tvorba HTML stránky – stlačení klávesy Tab a zápis třetího slova body.

Obrázek 25: Tvorba HTML stránky – stlačení klávesy Tab a zápis čtvrtého slova movie.

Obrázek 26: Dokončení HTML stránky – stlačení klávesy Tab.

4.6 Ukázka použití pluginu snipMate pro Javu

Zkusme si ještě ukázat použití tohoto pluginu při tvorbě kódu v Javě:

Obrázek 27: Deklaraci třídy zajistí snippet cl, který automaticky doplní i její název.

Obrázek 28: Doplnění jména třídy odvozené od názvu souboru.

Obrázek 29: Deklaraci metody main zajišťuje snippet main.

Obrázek 30: Vytvoření kostry metody main.

Obrázek 31: Konstrukce try-catch-finally se tvoří snippetem tryf.

Obrázek 32: Vytvoření kostry konstrukce try-catch-finally.

5. Plugin vim-fireplace

5.1 Popis pluginu vim-fireplace

Předposlední dnes popisovaný plugin se jmenuje vim-fireplace. Tento zdánlivě jednoduchý, o to však užitečnější plugin je určen vývojářům programujícím v jazyku Clojure. Jednou z důležitých funkcí tohoto přídavného modulu je podpora připojení k běžícímu interpretru jazyka Clojure a obousměrná komunikace s tímto interpretrem, což vývojářům umožňuje vyzkoušet si prakticky každý řádek zdrojového kódu, snadno nalézt dokumentaci k funkcím a makrům, zobrazit si zdrojový kód vybraného symbolu apod. vim-fireplace přepdokládá, že se interpret programovacího jazyka Clojure spouští příkazem:

lein repl

Pokud je tento příkaz spuštěn z adresáře s projektem, automaticky se provede načtení všech potřebných knihoven. Bližší informace o nástroji Leiningen (představovaném příkazem lein) naleznete například zde:

  1. Leiningen: nástroj pro správu projektů napsaných v Clojure
    http://www.root.cz/clanky/leiningen-nastroj-pro-spravu-projektu-napsanych-v-clojure/
  2. Leiningen: nástroj pro správu projektů napsaných v Clojure (2)
    http://www.root.cz/clanky/leiningen-nastroj-pro-spravu-projektu-napsanych-v-clojure-2/
  3. Leiningen: nástroj pro správu projektů napsaných v Clojure (3)
    http://www.root.cz/clanky/leiningen-nastroj-pro-spravu-projektu-napsanych-v-clojure-3/

Obrázek 33: Nápověda k plugunu vim-fireplace.

Obrázek 34: Interaktivní dialog pro připojení ke smyčce REPL (příkaz :connect).

5.2 Instalace pluginu vim-fireplace

Instalace tohoto přídavného modulu se nijak neliší od instalací většiny dříve popsaných pluginů, protože lze opět použít poslední verzi naklonovanou z GitHubu:

cd ~/.vim/bundle
git clone https://github.com/tpope/vim-fireplace
Cloning into 'vim-fireplace'...
remote: Counting objects: 1550, done.
remote: Total 1550 (delta 0), reused 0 (delta 0), pack-reused 1550
Receiving objects: 100% (1550/1550), 439.54 KiB | 372.00 KiB/s, done.
Resolving deltas: 100% (650/650), done.
Checking connectivity... done.

Tento plugin se automaticky inicializuje při otevření souborů s koncovkou .clj.

Obrázek 35: Nápověda k symbolu println.

Obrázek 36: Nápověda k symbolu for.

5.3 Použití pluginu vim-fireplace

Před využitím všech možností pluginu vim-fireplace je nutné provést dva kroky. Prvním z nich je spuštění smyčky REPL příkazem:

lein repl

Tento příkaz se spustí v jiném terminálu, než samotný Vim.

Dále je zapotřebí se ke smyčce REPL připojit z Vimu, a to konkrétně příkazem :Connect, který se zeptá na způsob připojení, adresu (localhost) a port (ten je vypsán na samostatný terminál).

Následně lze využívat například následující příkazy:

# Příkaz Popis
1 :Doc symbol nalezne a zobrazí dokumentaci k zadanému symbolu (funkci, makru…)
2 K podobná funkce, ovšem využívá standardní Vimovský příkaz (velmi užitečné a současně i rychlé)
3 :Source symbol zobrazí nápovědu k zadanému symbolu (funkci, makru)
4 [d zobrazí nápovědu k zadanému symbolu (funkci, makru)
5 [Ctrl+D skočí na definici symbolu, který je pod kurzorem
6 Ctrl+W Ctrl+D dtto, ale definice se otevře v novém okně
7 :Eval forma, na které se nachází kurzor, se pošle do REPL a tam se vyhodnotí
8 cp(příkaz pro pohyb) podobné předchozímu příkazu, ale vyhodnotí se jen forma mezi starou a novou pozicí kurzoru

Ve skutečnosti dává plugin vim-fireplace uživatelům k dispozici ještě mnohem více příkazů, ty si lze najít v nápovědě, která je součástí tohoto přídavného modulu.

Obrázek 37: Vyhodnocení formy.

Obrázek 38: Vyhodnocení formy.

Obrázek 39: Zobrazení zdrojového kódu symbolu print.

6. Plugin c.vim

6.1 Popis pluginu c.vim

Posledním pluginem, který si v dnešním článku popíšeme, je modul nazvaný c.vim, nebo též (poněkud s nadsázkou) C/C+±IDE, který lze nalézt na adrese http://vim.sourceforge.net/scrip­ts/script.php?script_id=213 (nízké číslo pluginu vypovídá o tom, že jeho první verze vznikla již poměrně dávno). Jedná se o poměrně rozsáhlý modul naprogramovaný Fritzem Menherem, který obsahuje mnoho funkcí sloužících pro urychlení práce programátorů píšících aplikace v programovacích jazycích C a C++. Mezi implementované funkce patří například vkládání různých typů komentářů z připravených šablon, vkládání koster strukturovaných příkazů (podmínek i programových smyček) či často používaných idiomů, práce s dnes velmi populárními snippety (vytváření a vkládání snippetů do programového kódu, viz též výše zmíněný plugin snipMate), podpora pro přímý překlad programu a jeho následného spuštění atd. Některé možnosti nabízené tímto pluginem si ukážeme v podkapitole 6.3.

Obrázek 40: Do hlavního menu Vimu se po instalaci modulu c.vim přidal další list. Zde je zobrazeno podmenu s možností definice a vkládání snippetů.

6.2 Instalace pluginu c.vim

Instalace tohoto přídavného modulu se opět nijak neliší od instalací většiny dříve popsaných pluginů, protože je možné použít poslední verzi naklonovanou z GitHubu:

cd ~/.vim/bundle
git clone https://github.com/WolfgangMehner/vim-plugins
Cloning into 'vim-plugins'...
remote: Counting objects: 3083, done.
remote: Total 3083 (delta 0), reused 0 (delta 0), pack-reused 3083
Receiving objects: 100% (3083/3083), 2.15 MiB | 702.00 KiB/s, done.
Resolving deltas: 100% (2091/2091), done.
Checking connectivity... done.

Z níže uvedeného výpisu je patrné, že repositář vim-plugins ve skutečnosti obsahuje větší množství pluginů, nejenom pouze c.vim:

.
├── autoload
│   ├── mmtemplates
│   └── mmtoolbox
├── awk-support
│   ├── codesnippets
│   ├── doc
│   ├── rc
│   ├── scripts
│   ├── templates
│   └── wordlists
├── bash-support
│   ├── codesnippets
│   │   └── debugging
│   ├── doc
│   ├── rc
│   ├── scripts
│   ├── templates
│   └── wordlists
├── c-support
│   ├── codesnippets
│   ├── doc
│   ├── rc
│   │   └── project
│   ├── scripts
│   ├── templates
│   └── wordlists
├── doc
│   └── internal
├── ftplugin
├── git-support
│   ├── data
│   ├── doc
│   ├── git-doc
│   └── rc
├── latex-support
│   ├── codesnippets
│   │   └── beamer
│   ├── doc
│   ├── rc
│   ├── templates
│   └── wordlists
├── lua-support
│   ├── codesnippets
│   ├── doc
│   ├── html2doc
│   ├── lua-doc
│   ├── rc
│   └── templates
├── matlab-support
│   ├── codesnippets
│   ├── doc
│   ├── rc
│   └── templates
├── perl-support
│   ├── codesnippets
│   │   └── RegularExpressions
│   ├── doc
│   ├── modules
│   ├── rc
│   ├── scripts
│   ├── templates
│   └── wordlists
├── plugin
├── project
├── syntax
└── vim-support
    ├── codesnippets
    ├── doc
    ├── rc
    └── templates

Obrázek 41: Podmenu pro spuštění přeložené aplikace, zavolání linkeru a další podobné činnosti.

6.3 Použití pluginu c.vim

Vzhledem k velkému množství funkcí nabízených tímto modulem se při jeho načítání vytváří i samostatné menu obsahující jak všechny příkazy, tak i k nim příslušné klávesové zkratky. Tyto zkratky začínají implicitně znakem zpětného lomítka, ovšem to lze změnit příkazem (viz též předchozí část tohoto seriálu, kde jsme se tímto tématem podrobně zabývali):

:let maplocalleader=znak

Pokud není menu při startu editoru v grafickém režimu (příkazy gvim či vim -g) zobrazeno, lze použít následující příkaz:

:set guioption+=m

Všechny dostupné funkce i jejich klávesové zkratky jsou dostupné na adrese http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf. Stejný soubor je ostatně součástí instalace tohoto přídavného modulu.

Po načtení přídavného modulu c.vim je možné si jeho funkci jednoduše vyzkoušet. Postačuje zadat příkaz:

\i0

Textový editor Vim se následně zeptá na název proměnné a na případné (nepovinné) další parametry počítané programové smyčky for. Pokud například jako odpověď na dotaz zadáme:

xx 10 20 2

Vygeneruje se správně zarovnaný zdrojový kód:

bitcoin_skoleni

for ( xx = 10; xx < 20; xx += 2 ) {
}

Ovšem při zadání pouhého názvu proměnné:

yy

Dostane vygenerovaná smyčka tvar:

for ( yy = 0; yy < n; yy += 1 ) {
}

7. Odkazy na předchozí části článku

  1. Užitečné skripty a pluginy pro textový editor Vim
    http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim/
  2. Užitečné skripty a pluginy pro textový editor Vim (2.část)
    http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-2-cast/
  3. Užitečné skripty a pluginy pro textový editor Vim (3.část)
    http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-3-cast/
  4. Užitečné skripty a pluginy pro textový editor Vim (4.část)
    http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-4-cast/

8. Odkazy na Internetu

  1. Surround
    http://www.bestofvim.com/plu­gin/surround/
  2. SnipMate
    http://www.bestofvim.com/plu­gin/snipmate/
  3. Getting a Clojure REPL in Vim With VimClojure, Nailgun, and Leiningen
    http://naleid.com/blog/2011/12/19/get­ting-a-clojure-repl-in-vim-with-vimclojure-nailgun-and-leiningen/
  4. The NERD Commenter : A plugin that allows for easy commenting of code for many filetypes.
    http://www.vim.org/scripts/scrip­t.php?script_id=1218
  5. NERD Commenter na GitHubu
    https://github.com/scroolo­ose/nerdcommenter
  6. luarefvim : Lua reference manual
    http://www.vim.org/scripts/scrip­t.php?script_id=1291
  7. lua.vim : Lua file type plug-in for the Vim text editor
    http://www.vim.org/scripts/scrip­t.php?script_id=3625
  8. vim-lua-ftplugin
    https://github.com/xolox/vim-lua-ftplugin
  9. Vi Improved
    https://wiki.python.org/moin/Vim
  10. javacomplete : Omni Completion for JAVA
    http://www.vim.org/scripts/scrip­t.php?script_id=1785
  11. SearchComplete
    http://www.vim.org/scripts/scrip­t.php?script_id=474
  12. ShowMarks
    http://www.vim.org/scripts/scrip­t.php?script_id=152
  13. ctrlp.vim
    https://github.com/kien/ctrlp.vim
  14. ctrlp.vim
    http://kien.github.io/ctrlp.vim/
  15. vim-signature
    https://github.com/kshenoy/vim-signature
  16. Supertab
    http://www.vim.org/scripts/scrip­t.php?script_id=1643
  17. Supertab (GitHub)
    https://github.com/ervandew/supertab
  18. Vim Essential Plugin: NERD Tree
    http://code.tutsplus.com/tutorials/vim-essential-plugin-nerdtree–net-19692
  19. The NERD tree : A tree explorer plugin for navigating the filesystem
    http://vim.sourceforge.net/scrip­ts/script.php?script_id=1658
  20. NERD Tree Guide
    http://usevim.com/2012/07/18/ner­dtree/
  21. vcscommand.vim : CVS/SVN/SVK/git/hg/bzr integration plugin
    http://www.vim.org/scripts/scrip­t.php?script_id=90
  22. vcscommand na GitHubu
    https://github.com/vim-scripts/vcscommand.vim
  23. Popis skriptu Vim Pathogen
    http://www.vim.org/scripts/scrip­t.php?script_id=2332
  24. Poslední verze skriptu Vim Pathogen
    https://tpo.pe/pathogen.vim
  25. Nejlepší pluginy pro Vim
    http://vimawesome.com/
  26. Nejlepší pluginy pro Vim
    http://www.vim.org/scripts/scrip­t_search_results.php?order_by=ra­ting
  27. Vim-airline na GitHubu
    https://github.com/bling/vim-airline
  28. Vim-airline na www.vim.org
    http://www.vim.org/scripts/dow­nload_script.php?src_id=22726
  29. Vim-fugitive na GitHubu
    https://github.com/tpope/vim-fugitive
  30. Vim-fugitive na www.vim.org
    http://www.vim.org/scripts/scrip­t.php?script_id=2975
  31. Textový editor Vim jako IDE (seriál)
    http://www.root.cz/clanky/textovy-editor-vim-jako-ide/
  32. Building Vim
    http://vim.wikia.com/wiki/Bu­ilding_Vim
  33. Getting the Vim source with Mercurial
    http://vim.wikia.com/wiki/Get­ting_the_Vim_source_with_Mer­curial
  34. Vim Perl Interface
    http://vim.dindinx.net/vim7/html/if_per­l.txt.php
  35. Vim Perl Support
    http://www.softpanorama.or­g/Editors/Vimorama/vim_per­l_support.shtml
  36. VIM as Python IDE
    http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/
  37. Stack Overflow: VIM: Perl interface: passing a variable to Perl and reading a vim variable from Perl
    http://stackoverflow.com/qu­estions/4999902/vim-perl-interface-passing-a-variable-to-perl-and-reading-a-vim-variable-from
  38. Stack Overflow: Getting started with vim scripting with Perl
    http://stackoverflow.com/qu­estions/2208618/getting-started-with-vim-scripting-with-perl
  39. Python with a modular IDE (Vim)
    http://www.sontek.net/python-with-a-modular-ide-vim
  40. Getting to VIM's Python interface
    http://zerokspot.com/weblog/2009/02/21/get­ting-to-know-vims-python-interface/
  41. Pretty-formatting XML
    http://vim.wikia.com/wiki/Pretty-formatting_XML
  42. Delete a pair of XML/HTML tags
    http://vim.wikia.com/wiki/De­lete_a_pair_of_XML/HTML_tags
  43. Vim as XML Editor
    http://www.pinkjuice.com/how­to/vimxml/
  44. xmledit: A filetype plugin to help edit XML, HTML, and SGML documents
    http://www.vim.org/scripts/scrip­t.php?script_id=301
  45. Poslední vývojová verze makra xmledit
    http://github.com/sukima/xmledit/
  46. vim.wikia: Display date-and-time on status line
    http://vim.wikia.com/wiki/Display_date-and-time_on_status_line
  47. vim.wikia: Writing a valid statusline
    http://vim.wikia.com/wiki/Wri­ting_a_valid_statusline
  48. vim.wikia: Statusline tab level ruler
    http://vim.wikia.com/wiki/Sta­tusline_tab_level_ruler
  49. vim.wikia: Switching between different statuslines
    http://vim.wikia.com/wiki/Swit­ching_between_different_sta­tuslines
  50. X Selections, Cut Buffers, and Kill Rings
    http://www.jwz.org/doc/x-cut-and-paste.html
  51. Accessing the system clipboard
    http://vim.wikia.com/wiki/Ac­cessing_the_system_clipbo­ard
  52. xcutsel(1) – Linux man page
    http://linux.die.net/man/1/xcutsel
  53. snipMate : TextMate-style snippets for Vim
    http://www.vim.org/scripts/scrip­t.php?script_id=2540
  54. msanders / snipmate.vim
    https://github.com/msander­s/snipmate.vim
  55. snipMate.vim Introductory Screencast
    http://vimeo.com/3535418
  56. Clewn home page
    http://clewn.sourceforge.net/
  57. How to connect vim with gdb – using clewn
    http://chunhao.net/blog/how-to-connect-vim-with-gdb-using-clewn
  58. yavdb : Yet Another (Generic) Vim Debugger Integration
    http://www.vim.org/scripts/scrip­t.php?script_id=1954
  59. Vim home page
    http://www.vim.org/
  60. vim (man page)
    http://www.linux-tutorial.info/modules.php?na­me=ManPage&sec=1&manpage=vim
  61. Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
    http://www.thegeekstuff.com/2009/01/tu­torial-make-vim-as-your-cc-ide-using-cvim-plugin/
  62. c.vim : C/C++ IDE
    http://vim.sourceforge.net/scrip­ts/script.php?script_id=213
  63. c.vim : C/C++ IDE key mappings
    http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf
  64. Základní základy editoru Vim
    http://www.root.cz/clanky/zakladni-zaklady-editoru-vim/
  65. Jak si přizpůsobit Vim
    http://www.root.cz/serialy/jak-si-prizpusobit-vim/
  66. Taglist (plugin)
    http://www.vim.org/scripts/scrip­t.php?script_id=273
  67. The NERD tree: A tree explorer plugin for navigating the filesystem
    http://www.vim.org/scripts/scrip­t.php?script_id=1658
  68. JavaBrowser : Shows java file class, package in a tree as in IDEs. Java source browser.
    http://www.vim.org/scripts/scrip­t.php?script_id=588
  69. snippetsEmu : An attempt to emulate TextMate's snippet expansion
    http://www.vim.org/scripts/scrip­t.php?script_id=1318
  70. Vim plugins for developers
    http://www.linuxtoday.com/upload/vim-plugins-for-developers-140619094010.html

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.