Letos v říjnu byla vydána osmá verze oblíbeného textového editoru Vim. Jedná se o poměrně přelomovou událost, protože předchozí (sedmá) verze se aktivně používá již deset let, i když v tomto dlouhém období samozřejmě vývoj úplně nestagnoval. V dnešním článku si nejprve řekneme, jakým způsobem je možné Vim 8 přeložit (nejenom) na Fedoře, a posléze se seznámíme s těmi změnami a vylepšeními, které jsou ihned viditelné a použitelné i běžnými uživateli. Navazující článek bude věnován rozšířením a vylepšením užitečným zejména pro autory pluginů.

Obsah

1. Od editoru Stevie k Vimu 8

2. Příprava Vimu 8 pro Fedoru 25 či pro starší systémy

3. Instalace balíčků potřebných pro překlad a slinkování

4. Překlad Vimu

5. Instalace přeloženého Vimu

6. Nové vlastnosti Vimu viditelné všem uživatelům

7. Stávající způsoby zobrazení dlouhých řádků v okně editoru

8. Volba breakindent

9. Ukázka použití volby breakindent

10. Standardní správce balíčků

11. Adresářová struktura s balíčky

12. Zpracování souborů .viminfo

13. Blbinka na konec – příkaz :smile pro zvýšení (?) produktivity

14. Odkazy na Internetu

1. Od editoru Stevie k Vimu 8

Většina administrátorů, programátorů ale i běžných uživatelů pracujících s Linuxem (a samozřejmě nejenom s Linuxem) se již pravděpodobně setkala s textovým editorem Vim. Ovšem možná již méně známým faktem je, že tento editor původně vznikl na legendárních osobních mikropočítačích Amiga. Historie Vimu se začala psát současně se vznikem aplikace nazvané Vim 1.0. Tento program vytvořil již v roce 1988 Bram Moolenaar. V podstatě se jednalo o prostou a k tomu ještě původně neúplnou imitaci původního textového editoru vi (visual). 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, který původně vzniklo pro konkurenční Atari ST), 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 bajt. Ostatně jenom díky tomu mohla být pro Vim v dalších letech vytvořena nová licence kompatibilní s GPL.

01

Obrázek 1: Příkazem :help credits je možné již od prvních rozšířených verzí textového editoru Vim zobrazit odkaz na editor Stevie a jeho autory.

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.

02

Obrázek 2: Adresář s Vimem verze 3.0 pro Amigu zobrazený v souborovém manažeru Directory Opus.

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“.

03

Obrázek 3: První Vim, který autor tohoto článku aktivně používal, nesl číslo verze 3.0.

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ýt Vim používán v mnoha linuxových distribucích, kde postupně nahrazoval další klony editoru vi, například Elvise či Nvi.

04

Obrázek 4: Seznam parametrů Vimu verze 3.0 je již poměrně dlouhý, zejména v porovnání s vi.

V dalších verzích editoru Vim se začaly objevovat nové vlastnosti, například horizontální i vertikální členění oken, podpora záložek, skriptovací jazyk Vim Script, rozhraní pro další skriptovací jazyky, režim diff atd. Verze 5 byla přelomová především pro programátory, protože jim nabídla možnost zvýraznění syntaxe. Navíc nebyla definice syntaxe pro různé typy souborů „zadrátována“ přímo do editoru, ale bylo ji možné měnit s využitím skriptů (dnes je to zcela běžné, ale v době Vimu 5 byla tato vlastnost velmi vítaná). Současně se šestou verzí byla do Vimu přidána možnost rozdělení okna vertikálně. S tím souvisí i režim zobrazení dvou souborů v režimu porovnávání (diff mode). Mezi další viditelné a velmi důležité novinky přidané do této verze patří podpora pro UTF-8, která současně zavedla i podporu pro UCS-2, UCS-4 a UTF-16. Vim 6 bylo možné alternativně spustit v módu „Easy Vim“ (Evim), který se od běžného chování Vimu odlišuje v tom, že se editor implicitně nachází ve vkládacím režimu. Easy Vim byl (teoreticky) měl ulehčit přechod nových uživatelů z jiného textového editoru na Vim.

05

Obrázek 5: Druhá obrazovka se seznamem parametrů dostupných ve Vimu 3.0.

Sedmá verze Vimu vyšla již v roce 2006 a přinesla uživatelům další užitečné změny, například podporu pro kontrolu překlepů v editovaných souborech s možností zápisu nových slov do uživatelských slovníků. Přidána byla i podpora pro záložky (tab(s)) a rozšířily se možnosti skriptovacího jazyka Vimu, což je vlastnost, kterou ocenili především autoři pluginů. Současně Vim 7 podporoval možnost spouštění pluginů naprogramovaných v jiném skriptovacím jazyce, například v Pythonu, Perlu či Lue. Nicméně po vydání Vimu 7 se vývoj pozastavil a začaly se objevovat některé problematické rysy původní koncepce pluginů (především fakt, že pokud je plugin spuštěn, nemůže uživatel provádět asynchronní změny v dokumentu, ale musí počkat na dokončení práce pluginu). Z tohoto důvodu vznikl fork Vimu nazvaný Neovim, v němž začali vývojáři implementovat některé nové vlastnosti, především asynchronní spouštění skriptů. A právě zpětná akceptace některých změn v hlavní větvi Vimu částečně stojí za vznikem jeho osmé verze.

2. Příprava Vimu 8 pro Fedoru 25 či pro starší systémy

Textový editor Vim verze 8 můžete najít v repositářích Fedory 26 (http://rpmfind.net/linux/RPM/fedora/devel/rawhide/x86_64/v/vim-enhanced-8.0.094-1.fc26.x86_64.html, ovšem samozřejmě je možné provést překlad poslední verze a lokální instalaci tohoto editoru i pro starší Fedory. Budeme k tomu potřebovat překladač céčka, několik podpůrných utilit (make, linker, wget, unzip) a instalaci vývojových verzí knihovny ncurses (popř. dalších knihoven, pokud vyžadujete překlad Gvimu). Postup si popíšeme v navazujících kapitolách (vyzkoušen byl na Fedoře 25 a na Mintu).

vim8_01

Obrázek 6: Uživatelské prostředí Vimu 8 po jeho spuštění se vlastně nijak zásadně neliší od předchozí verze. Většina důležitých změn se skrývá uvnitř.

3. Instalace balíčků potřebných pro překlad a slinkování

Příprava před překladem je jednoduchá – nainstalujeme vývojovou verzi knihovny ncurses a popř. i dalších závislých balíčků.

Ve Fedoře:

sudo yum install ncurses-devel

či aktuálněji:

sudo dnf install ncurses-devel

V Mintu si dejte pozor na to, že se balíček jmenuje odlišně:

sudo apt-get install libncurses-dev

4. Překlad Vimu

Ve druhém kroku získáme archiv se zdrojovými kódy a rozbalíme ho do pracovního adresáře. Postup je shodný na všech systémech:

wget https://github.com/vim/vim/archive/master.zip	
unzip master.zip

Výsledkem je poměrně velký adresář s cca 75 MB zdrojových kódů a pomocných datových souborů.

V kroku následujícím se provede příprava Makefile následovaná vlastním překladem:

cd vim-master
cd src/
./configure
make

Pokud překlad proběhne v pořádku, měl by být v aktuálním adresáři připraven spustitelný binární soubor vim:

file vim
vim: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=a4a8c0450e172314d87769e0b0ed072e164c7f82, not stripped

ls -la vim
-rwxr-xr-x 1 tester tester 8904520 lis 26 22:04 vim

Můžeme si zkusit nově přeložený Vim spustit:

./vim

5. Instalace přeloženého Vimu

Instalace nově přeloženého Vimu se provede následujícím způsobem:

sudo make install

Instalace spustitelného binárního souboru se implicitně provede do adresáře /usr/local/bin, takže se přesvědčte, že tento adresář je zmíněn v proměnné $PATH:

echo $PATH
/home/tester/.npm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/tester/bin

Pozor: pokud se po zadání příkazu vim spustí původní verze Vimu (7.x), znamená to, že cesta /usr/bin má přednost před /usr/local/bin. Pokud vám toto nastavení vyhovuje, lze Vim 8 spouštět i přímo:

/usr/local/bin/vim

vim8_02

Obrázek 7: Výpis informací o právě přeloženém a spuštěném Vimu 8. Povšimněte si data překladu zobrazeného v pravé horní části obrazovky.

6. Nové vlastnosti Vimu viditelné všem uživatelům

V následujících kapitolách si popíšeme ty nové vlastnosti Vimu, které jsou viditelné všem uživatelům. V navazujícím článku se pak zaměříme na vlastnosti dostupné spíše programátorům vytvářejícím pluginy (z nich samozřejmě mohou profitovat všichni uživatelé, ale jen nepřímo).

vim8_03

Obrázek 8: Informace o nových vlastnostech Vimu jsou dostupné v nápovědě, stačí napsat příkaz :help version8.

7. Stávající způsoby zobrazení dlouhých řádků v okně editoru

První užitečnou vlastností, kterou mohou využít prakticky všichni uživatelé textového editoru Vim, zejména pak autoři pracující s textovými dokumenty s dlouhými odstavci, je možnost úpravy zobrazení delších textových řádků začínajících bílými znaky. Připomeňme si, že ty textové řádky, které přesahují šířku aktivního okna editoru, mohou být v závislosti na nastavení editoru zobrazeny dvěma způsoby:

  1. Textový řádek může být zobrazen na jediném řádku na obrazovce, což znamená, že v jeden okamžik bude viditelná pouze část tohoto řádku, v závislosti na aktuální pozici textového kurzoru. Tuto možnost, kterou používají spíše programátoři při úpravách zdrojových kódů, zapneme volbou :set nowrap.
  2. Alternativně může být textový řádek vizuálně zalomen, takže na obrazovce bude zobrazen jako větší množství „vizuálních“ řádků. Při úpravách textu se text rozdělený do vizuálních řádků automaticky přeskládává, ovšem do editovaného textového souboru se ukládají jen skutečně vložené konce řádků. Tento způsob zobrazení se zapne volbou :set wrap a kdykoli je ho samozřejmě možné vypnout volbou :set nowrap – na obsah výsledného souboru nemá způsob zobrazení žádný vliv.

06

Obrázek 9: Text zobrazený bez vizuálního zalamování řádků.

Druhý způsob zobrazení textů je v případě potřeby ještě možné upravit volbou :set showbreak=text, která určuje, že na začátku každého „vizuálního“ řádku bude zobrazen a patřičně obarven určený text, jenž uživateli pomůže v orientaci v dlouhých odstavcích. Může se například jednat o znak > či o dvojici znaků >\ (za zpětným lomítkem je mezera). Mimochodem: prefixy vizuálních řádků jsou obarveny podobně jako všechny další oblasti v textových oknech, které neobsahují editovaný text (typickým příkladem jsou znaky s tildami zobrazené za koncem souboru). Pro obarvení těchto oblastí lze použít volbu :hi NonText text=style cterm=styl ctermfg=barva ctermbg=barva atd.

07

Obrázek 10: Text zobrazený se zapnutým vizuálním zalamováním na okraji okna (bez ohledu na konce slov).

8. Volba breakindent

Další úprava druhého způsobu spočívá v použití volby :set linebreak. Použití této volby zajistí zalomení „vizuálního“ řádků nikoli přesně v místě konce okna editoru, ale na konci slov, což je v mnoha případech mnohem užitečnější (slova nejsou násilně rozdělována atd.). Dvojice voleb :set wrap a :set linebreak tedy zajistí práci s textovým souborem, která se do značné míry podobá způsobu práce s běžnými textovými procesory (ostatně přesně tyto dvě volby byly použity pro přípravu tohoto článku).

08

Obrázek 11: Text zobrazený se zapnutým vizuálním zalamováním na koncích slov.

Způsob vizuálního (nikoli fyzického) zalamování dlouhých textových řádků, který se zapíná výše uvedenými volbami :set wrap a :set linebreak, je sice velmi užitečný, ale v některých případech není zobrazení zcela ideální. Příkladem nepříliš dobrého způsobu zobrazení jsou především ty textové řádky, které začínají bílými znaky (mezerami atd.). Tyto textové řádky jsou na obrazovce zalomeny takovým způsobem, že vizuální řádky (samozřejmě kromě řádku prvního) začínají vždy na prvním sloupci, což je poněkud nepřehledné (příkladem mohou být soubory uložené ve formátech AsciiDoc či Markdown, v nichž se odsazením řádků určuje způsob formátování výsledných dokumentů).

09….

Obrázek 12: Text zobrazený se zapnutým vizuálním zalamováním na koncích slov a zvýrazněním zalomených řádků.

Naštěstí se v osmé verzi Vimu objevila nová volba nazvaná příhodně breakindent, která tuto nedokonalost napravuje. V případě, že je tato volba zapnuta příkazem :set breakindent, jsou ty obrazové řádky, jenž vznikly vizuálním rozdělením dlouhého textového řádku, zarovnány pod sebe. Tuto volbu lze v případě potřeby zkombinovat s ostatními dvěma výše uvedenými volbami, tedy linebreak a showbreak. Příklad použití této volby je ukázán v navazující kapitole.

vim8_04

Obrázek 13: Nápověda k nové konfigurační volbě breakindent.

9. Ukázka použití volby breakindent

Podívejme se na použití volby breakindent při editaci známého textu „Lorem Ipsum“. Jednotlivé možnosti zobrazení můžeme vidět na následujících screenshotech:

vim8_05

Obrázek 14: Text zobrazený po nastavení volby :set wrap.

vim8_06

Obrázek 15: Vložení několika mezer na začátek editovaného řádku.

vim8_07

Obrázek 16: Způsob zobrazení řádku po zapnutí volby :set breakindent.

10. Standardní správce balíčků

Pro textový editor Vim vzniklo nepřeberné množství různých pluginů. Některé pluginy jsou jednoduché; může se například jednat o rozšíření nápovědy (plugin luaref) či o přidání několika nových klávesových zkratek. Další pluginy jsou však složitější a existují i poměrně rozsáhlé pluginy, o nichž jsem se zmínil v následujících článcích (na konkurenčním Rootu :-):

  1. Užitečné skripty a pluginy pro textový editor Vim
  2. Užitečné skripty a pluginy pro textový editor Vim (2.část)
  3. Užitečné skripty a pluginy pro textový editor Vim (3.část)
  4. Užitečné skripty a pluginy pro textový editor Vim (4.část)
  5. Užitečné skripty a pluginy pro textový editor Vim (5.část)
  6. Užitečné skripty a pluginy pro textový editor Vim: propojení Vimu s debuggery

Při instalaci většího množství pluginů však stojíme před závažným problémem – jak tyto pluginy instalovat či odinstalovat bez rozbití konfigurace ostatních pluginů. Problém spočívá v tom, že v předchozích verzích Vimu byly cesty nastavené takovým způsobem, že se pluginy musely buď rozbalovat do společných adresářů (všechny nápovědy v jednom adresáři, syntaktické soubory v dalším adresáři, skripty v adresáři třetím atd.) popř. bylo nutné použít některý správce pluginů – typicky Vundle či Pathogen. Ovšem situace, kdy se pro správu pluginů musel používat jiný plugin, byla … suboptimální :-). Z tohoto důvodu je ve Vimu 8 možné použít interního správce a postupně tak odstranit nutnost použití Vundle či Pathogenu. To ale nějaký čas potrvá, protože se musí stávající balíčky s pluginy upravit. Nicméně již dnes můžeme několik nových balíčků kompatibilních s Vimem 8 nalézt, popř. lze zkombinovat standardního správce s Vundlem či Pathogenem.

vim8_08

Obrázek 17: Informace o správci balíčků získáte po zadání příkazu :help packages.

11. Adresářová struktura s balíčky

Při používání standardního správce balíčků z Vimu 8 je důležité, aby se pluginy po rozbalení umístily do správných adresářů, v nichž je bude Vim hledat. Nejjednodušší je instalace pluginů pouze pro aktivního uživatele, protože v tomto případě je celá adresářová struktura umístěna v adresáři ~/.vim. Zde musí být vytvořen podadresář nazvaný pack a v něm další podadresář s libovolným jménem (já jsem v příkladu použil podadresář nazvaný balicky):

[~/.vim]$ tree
.
└── pack
    └── balicky

Další dělení je jednoduché – v dalším podadresáři nazvaném opt jsou umístěny ty pluginy, které se mají načítat až na základě žádosti uživatele (optional), zatímco v podadresáři start budou umístěny ty pluginy, které se načtou a inicializují automaticky. V případě, že je nainstalován jen jediný volitelně spustitelný plugin nazvaný „makejob“ (viz odkazy na konci článku), bude celá adresářová struktura vypadat takto:

[~/.vim]$ tree
.
└── pack
    └── balicky
        └── opt
            └── makejob
                ├── doc
                │   └── makejob.txt
                ├── LICENSE
                ├── plugin
                │   └── makejob.vim
                └── README.md

6 directories, 4 files

Pokud je navíc nainstalován další plugin nazvaný pluginx, který se má spustit automaticky, rozšíří se adresářová struktura následujícím způsobem:

[~/.vim]$ tree
.
└── pack
    └── balicky
        ├── start
        │   └── pluginx
        │       ├── doc
        │       │   └── pluginx.txt
        │       ├── LICENSE
        │       ├── plugin
        │       │   └── pluginx.vim
        │       └── README.md
        └── opt
            └── makejob
                ├── doc
                │   └── makejob.txt
                ├── LICENSE
                ├── plugin
                │   └── makejob.vim
                └── README.md

10 directories, 8 files

Podobně v případě většího množství pluginů:

.
└── pack
    └── balicky
        ├── start
        │   ├── plugin1
        │   │   ├── doc
        │   │   │   └── plugin1.txt
        │   │   ├── LICENSE
        │   │   ├── plugin
        │   │   │   └── plugin1.vim
        │   │   └── README.md
        │   └── plugin2
        │       ├── doc
        │       │   └── plugin2.txt
        │       ├── LICENSE
        │       ├── plugin
        │       │   └── plugin2.vim
        │       └── README.md
        └── opt
            ├── makejob
            │   ├── doc
            │   │   └── makejob.txt
            │   ├── LICENSE
            │   ├── plugin
            │   │   └── makejob.vim
            │   └── README.md
            └── pluginZ
                ├── doc
                │   └── pluginZ.txt
                ├── LICENSE
                ├── plugin
                │   └── pluginZ.vim
                └── README.md

12. Zpracování souborů .viminfo

Jednou z užitečných vlastností textového editoru Vim je jeho schopnost ukládání důležitých stavových informací do souboru nazvaného implicitně .viminfo. Do tohoto souboru se ukládá například historie příkazů, historie vyhledávaných řetězců, obsah pracovních registrů, uživatelem definované značky (marks), poslední pozice kurzoru v otevřených souborech, globální proměnné atd. Práce s tímto souborem většinou probíhá zcela automaticky a je před uživatelem do značné míry skryta; samozřejmě za předpokladu, že nedojde k žádné výjimečné události (poškozený soubor, nečitelný soubor, chyba při zápisu atd.). Pro zajímavost si ukažme, jak vypadá část souboru .viminfo s uloženými značkami. Nejprve jsou v něm uloženy informace o globálních značkách, kde se kromě čísla řádku a čísla sloupce ukládá i jméno souboru:

# File marks:
'A  4  0  ~/reports/mail-daily-report.sh
'Z  91  4  ~/reports/daily_report.txt
'0  91  4  ~/reports/daily_report.txt
'1  4  0  ~/reports/mail-daily-report.sh
'2  163  7  ~/temp/_viminfo
'3  1  0  ~/disable_selinux.sh
'4  50  0  /var/log/messages
'5  1  0  /var/log/messages
'6  29  0  /var/www/html/openjdk/style.css
'7  11  19  /var/www/html/openjdk/jtreg/icedtea6/2011-07-12/jtreg-summary.log
'8  8  0  /var/www/html/openjdk/jtreg/icedtea6/2011-07-08
'9  3  9  ~/reports/Java2Dbenchmark/graph_.sh

Poté se mohou v souboru .viminfo vyskytovat informace o značkách definovaných pro dvacet posledně editovaných souborů. Pro každý soubor je uložen zvláštní seznam značek (to je logické, protože by jinak docházelo ke kolizi jmen):

# History of marks within files (newest to oldest):

> ~/reports/daily_report.txt
        "       91      4
        .       64      0
        +       66      0
        +       67      0
        +       64      0


> ~/reports/mail-daily-report.sh
        "       4       0

> ~/temp/_viminfo
        "       163     7

> ~/disable_selinux.sh
        "       1       0
...
...
...

vim8_09

Obrázek 18: Nápověda, v níž je popsána struktura souborů .viminfo.

Práce se souborem .viminfo začne být problematická ve chvíli, kdy je spuštěno více instancí Vimu. V tomto případě poslední Vim, který je uzavřen, zapíše své změny do tohoto souboru a přepíše tak všechny předchozí změny (tedy i historii příkazů, obsah registrů apod.). To může být poněkud nepříjemné a dokonce to může vést ke ztrátě dat, protože mnoho uživatelů například předpokládá, že jimi vytvořená makra „přežijí“ ukončení Vimu a bude je možné použít kdykoli znovu. Aby bylo možné zajistit toto chování, je formát souboru .viminfo ve Vimu 8 změněn tak, že se u každého záznamu pamatuje i časová značka, takže se zabrání přepisu novějšího údaje údajem starším. Příkladem může být například obsah registru a – pokud se při ukončení Vimu zjistí, že je ve .viminfo novější údaj, nedojde k jeho přepsání.

vim8_10

Obrázek 19: Takto nyní vypadá obsah souboru .viminfo vygenerovaný osmou verzí Vimu. Povšimněte si časových značek typu 1480108745.

13. Blbinka na konec – příkaz :smile pro zvýšení (?) produktivity

Posledním důležitým příkazem, který nalezneme v osmé verzi editoru Vim, je příkaz :smile. Po zadání tohoto příkazu se okno editoru změní následujícím způsobem, což je zajisté velmi užitečné (pokud vám ovšem za zády zrovna nestojí šéf, který by si mohl obrázek špatně vyložit):

vim8_11

Obrázek 20: Tato vlastnost je ten nejdůležitější důvod, proč si Vim 8 musíte nainstalovat.

Poznámka: zajímavé je, že do Neovimu nebyl, alespoň prozatím, patch s touto důležitou novinkou přijat.

14. Odkazy na Internetu

  1. Vim – the editor
    http://www.vim.org/
  2. Vim 8.0 is released
    https://laravel-news.com/2016/09/vim-8-0-is-released/
  3. Vim: So long Pathogen, hello native package loading
    https://shapeshed.com/vim-packages/
  4. :smile command was not backported! #5116
    https://github.com/neovim/neovim/issues/5116
  5. Makejob
    http://www.vim.org/scripts/script.php?script_id=5479
  6. Články o Vimu na Root.cz:
    http://www.root.cz/n/vim/clanky/
  7. Vim sedm – první část
    http://www.root.cz/clanky/vim-sedm-prvni-cast/
  8. vim (man page)
    http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=vim
  9. History of the Text Editor
    http://vanstee.me/history-of-the-text-editor.html
  10. Interview with Bill Joy
    http://web.cecs.pdx.edu/~kirkenda/joy84.html
  11. vi Editor Commands
    http://www.cs.rit.edu/~cslab/vi.html#A1.4
  12. vi Manual
    http://www.cs.fsu.edu/general/vimanual.html
  13. Mastering the Vi Editor
    http://www.susnet.uk/mastering-the-vi-editor
  14. Vim as a Python IDE, or Python IDE as Vim
    http://blog.jetbrains.com/pycharm/2013/06/vim-as-a-python-ide-or-python-ide-as-vim/
  15. Vi Improved
    https://wiki.python.org/moin/Vim
  16. Popis skriptu Vim Pathogen
    http://www.vim.org/scripts/script.php?script_id=2332
  17. Poslední­verze skriptu Vim Pathogen
    https://tpo.pe/pathogen.vim
  18. Nejlepší pluginy pro Vim
    http://vimawesome.com/
  19. Nejlepší pluginy pro Vim
    http://www.vim.org/scripts/script_search_results.php?order_by=rating
  20. Building Vim
    http://vim.wikia.com/wiki/Building_Vim
  21. Vim plugins for developers
    http://www.linuxtoday.com/upload/vim-plugins-for-developers-140619094010.html