Hlavní navigace

Kakoune: moderní textový editor s modálním ovládáním

Pavel Tišnovský

Dnes se seznámíme se zajímavým textovým editorem Kakoune. Tento editor je založen na modálním ovládání, které známe z editorů Vi a Vim, ovšem oproti nim došlo k několika změnám částečně inspirovaným například Emacsem.

Doba čtení: 27 minut

Sdílet

11. Výběry a provedení operací na více místech textu

12. Registry

13. Použití většího množství oken

14. Některé další možnosti poskytované editorem Kakoune

15. Krátká přehlídka dalších textových editorů inspirovaných Vimem

16. PyVim

17. AMP – textový editor naprogramovaný v Rustu

18. Elvis

19. Minimalistický editor e3

20. Odkazy na Internetu

1. Kakoune: moderní textový editor s modálním ovládáním

V dnešním článku se seznámíme s poměrně novým a (alespoň prozatím) relativně neznámým textovým editorem, který se jmenuje Kakoune. Jedná se o textový editor, jenž je založen na modálním ovládání, tj. uživatel se podle potřeby musí přepínat mezi několika režimy editoru (normální, vkládací atd., viz další text). Modální ovládání ve skutečnosti není žádná novinka, protože bylo použito již v původním editoru Vi a z něho odvozeného slavného editoru Vim, s nímž jsme se již na stránkách Rootu mnohokrát setkali, mj. i v samostatném seriálu. I díky modálnímu ovládání jsou úpravy textu v Kakoune velmi rychlé a efektivní (a to například i na klávesnicích se špatně umístěnými kurzorovými šipkami), ovšem efektivní a rychlé editace se pochopitelně dosáhne až poté, co se uživatel naučí alespoň základní sadu příkazů.

Obrázek 1: Logo nového textového editoru Kakoune…

Obrázek 2: … je (což asi není úplná náhoda) podobné logu Vimu.

Současná verze textového editoru Kakoune je určena pro provozování v terminálu, ovšem tento editor dokáže využívat možností poskytovaných nástroji tmux, screen, i3 (správce oken) atd. pro podporu editace většího množství bufferů ve více oknech, což je dosti netypická vlastnost (editor Vim například pracuje jinak – má totiž implementovanou vlastní správu oken a bufferů, Vi pro jistotu ani nedokáže zobrazit více bufferů současně). V Kakoune nalezneme i další zajímavé funkce, například kontextovou nápovědu, obrazovkové menu, automatické doplňování textu, asynchronní spouštění externích příkazů atd. Nechybí ovšem ani (nezbytný?) „pan sponka“, kterého uvidíme na některých screenshotech v dalším textu (ovšem pan sponka není ani animovaný ani nevyluzuje žádné zvuky, takže je možné jeho přítomnost tolerovat).

Obrázek 3: Prostředí textového editoru Vim v případě jeho spuštění v terminálu. O rozdělení plochy terminálu do oken se stará Vim ve vlastní režii.

2. Další klon Vi?

Již v úvodní části dnešního článku je však nutné zdůraznit, že Kakoune není „pouhým“ dalším klonem textového editoru Vi či Vim (zkratka „Vim“ znamenala „Vi iMitation“, dnes již pochopitelně „Vi iMproved“). Ve skutečnosti se jedná o zcela novou aplikaci, která přebírá myšlenky modálního editoru a současně používá i některé zkratky Vimu. Ovšem zdaleka ne všechny zkratky a příkazy fungují v Kakoune stejně jako ve Vimu, což znamená, že přechod není jednoduchý. Příkladem může být typický příkaz dw, který ve Vimu znamená „smaž slovo“, resp. přesněji „smaž text od pozice kurzoru do začátku následujícího slova“. V editoru Kakoune tento příkaz nebude fungovat, protože v tomto editoru nejsou podporovány operátory spojené s přesunem kurzoru. Ovšem namísto toho bude fungovat příkaz wd s odlišným významem „vyber slovo a to smaž“. Základní rozdíl tedy spočívá v odlišné filozofii práce s textem:

  • Ve Vi a Vimu se používá kombinace operátor+příkaz pro přesun kurzoru. Uživatel tedy nemá přímou zpětnou vazbu, nad jakým textem bude operace provedena (pokud nepoužije vizuální režim, ten však vyžaduje stisk další klávesy). Po zaučení je však práce s textem velmi rychlá.
  • V editoru Kakoune jsou prakticky všechny operace provedeny na vybraným textem (používá se zde termín selection), takže i vymazání slova probíhá tak, že se nejdříve slovo či jeho část vybere (výběr je vizuálně odlišen) a teprve poté se zvolí operace, která se má s výběrem provést. To odpovídá chování běžných editorů, ovšem s tím podstatným rozdílem, že pro výběr textu existuje velké množství více či méně sofistikovaných příkazů.
Poznámka: v tomto ohledu i v některých dalších maličkostech se editor Kakoune podobá spíše Emacsu a jeho klonům, než dvojici Vi+Vim.

Obrázek 4: Informace o verzi editoru Kakoune zobrazená po spuštění editoru (pokud je ovšem v terminálu dostatek místa na zobrazení červeného dialogu).

3. Další vybrané aplikace inspirované ovládáním Vi/Vimu

Ve skutečnosti ovšem není textový editor Kakoune v žádném případě jedinou aplikací, která používá ovládání inspirované textovými editory Vi a Vim. Například pro známý textový editor Atom [1] [2] existuje zásuvný modul pojmenovaný atom-vim-mode-plus a některé další moduly s podobným významem – přidat modální „vimovské“ ovládání.

***

Obrázek 5: Balíček Vim Mode je mezi Atomisty :-) velmi populární.

***

Obrázek 6: Nové klávesové zkratky zavedené balíčkem Vim Mode do textového editoru Atom.

Dále jste se na stránkách serveru mojefedora.cz [1] [2] mohli seznámit s projektem pojmenovaným Vrapper, jenž přidává (alespoň některé) klávesové zkratky Vimu do integrovaného vývojového prostředí Eclipse a emulace Vimu je dokonce dostupná i pro Libre Office díky pluginu vibreoffice (ten ovšem podporuje jen ty nejzákladnější příkazy, ze všech zmíněných pluginů je zdaleka v nejhorším stavu).

Obrázek 7: Integrované vývojové prostředí Eclipse s nainstalovaným pluginem Vrapper.

Jedna z nejdokonalejších emulací Vi a Vimu, s níž se můžeme v praxi setkat, je implementována v pluginu Evil (Mode) pro slavný textový editor Emacs. S možnostmi nabízenými režimem Evil mode jsme se již na stránkách Roota setkali v článku Evil: kombinace editačních příkazů Vimu a síly Emacsu , který byl součástí krátkého seriálu o některých možnostech nabízených jak Emacsem, tak (a to především) Emacs Lispem.

Obrázek 8: Přepnutí Emacsu do režimu Evil zadáním příkazu M-x evil-mode (zápis „M-x“ v Emacsu znamená označení klávesové zkratky Alt+X).

Obrázek 9: Režimy Vimu a způsob přechodu mezi nimi.

S více či méně dokonalou emulací textového editoru Vim se ovšem setkáme i v integrovaném vývojovém prostředí Visual Studio Code. Pro toto IDE existuje hned několik pluginů, které nabízí některé možnosti Vimu; ostatně postačuje se podívat na následující snímek obrazovky s prostředím VSCode, v němž jsou vypsány některé pluginy, v jejichž názvu je použit řetězec „vim“:

Obrázek 10: Pluginy pro integrované vývojové prostředí Visual Code Studio, které ve svém názvu obsahují řetězec „vim“.

Obrázek 11: Nejvíce funkcí Vimu je emulováno balíčkem nazvaným jednoduše VSCodeVim. Ovšem ani zde není emulace dokonalá, protože například není podporován skriptovací jazyk VimScript (což dále znamená, že nejsou podporovány prakticky žádné pluginy určené přímo pro Vim).

I editor integrovaný do QtCreatoru dokáže do jisté míry emulovat chování Vimu, samozřejmě včetně jeho multimodálního rozhraní, a dokonce je možné Qt Creator nastavit takovým způsobem, že si přečte uživatelský konfigurační soubor .vimrc. Pokud je režim emulování editoru Vim (takzvaný FakeVim) povolen, je v pravém dolním rohu stavové řádky zobrazen aktuální režim Vimu (COMMAND, INSERT, REPLACE, VISUAL) a s využitím znaku : (dvojtečka) lze přejít do režimu zadávání příkazů, z nichž nejpoužívanější pravděpodobně bude příkaz pro textovou substituci (:s). Režim emulace Vimu lze kdykoli zapnout či vypnout klávesovou zkratkou Alt+V, Alt+V (nejedná se o chybu, skutečně je nutné dvakrát stlačit Alt+V).

Obrázek 12: Jednou ze zajímavých a pro mnohé programátory i užitečných vlastností Qt Creatoru je i režim integrovaného programátorského editoru, který do značné míry napodobuje chování Vimu.

4. Instalace textového editoru Kakoune

K dispozici je hned několik možností instalace textového editoru Kakoune. Samozřejmě je možné si stáhnout zdrojové kódy a provést lokální překlad tohoto textového editoru. Kakoune je naprogramován v jazyku C++ (mimochodem: využívá standardu C++17), takže pro překlad pochopitelně vyžaduje jak překladač programovacího jazyka C++, tak i běžnou sadu nástrojů používaných pro vývoj (make, linker atd.). Kromě toho se Kakoune linkuje i s několika knihovnami, zejména s knihovnou ncurses (díky ní může používat celoobrazovkové textové uživatelské rozhraní s volným pohybem kurzoru po celé ploše terminálu). Pokud tedy již máte nainstalovanou vývojovou variantu knihovny ncurses (její jméno se liší podle distribuce, může být například „libncurses-devel“, „libncursesw5-dev“ apod.) a nějaký novější překladač jazyka C++, měl by být překlad editoru Kakoune přímočarý, i když relativně pomalý.

Nejprve naklonujeme repositář se zdrojovými kódy i s Makefile:

$ git clone http://github.com/mawww/kakoune.git
 
Cloning into 'kakoune'...
warning: redirecting to https://github.com/mawww/kakoune.git/
remote: Enumerating objects: 102, done.
remote: Counting objects: 100% (102/102), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 39431 (delta 44), reused 98 (delta 44), pack-reused 39329
Receiving objects: 100% (39431/39431), 35.92 MiB | 19.77 MiB/s, done.
Resolving deltas: 100% (28576/28576), done.

Dále se přepneme do adresáře s naklonovaným repositářem a spustíme překlad s využitím nástroje make:

$ cd kakoune/src
 
$ make
 
g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE  -O3 -pedantic -std=c++17 -g -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-address -MD -MP -MF .alias_registry.opt.d -c -o .alias_registry.opt.o alias_registry.cc
 
o  -o kak.opt
ln -sf kak.opt kak

popř. může následovat příkaz pro instalaci:

$ make install

Po překladu a slinkování vznikne soubor nazvaný kak.opt, na který je automaticky vytvořen link pojmenovaný kak (autor editoru evidentně nepochází z ČR :-):

$ ls -lah kak*
 
lrwxrwxrwx. 1 tester tester 7 Mar 11 13:24 kak → kak.opt
-rwxrwxr-x. 1 tester tester 43M Mar 11 13:24 kak.opt

Poznámka: Nelekněte se obrovské velikosti tohoto spustitelného souboru – spoustu informací, které nejsou důležité pro vlastní běh aplikace, je možné odstranit příkazem strip a získat tak výsledný soubor o již akceptovatelnější velikosti přibližně 2MB:
$ strip kak.opt

5. Použití předkompilovaného balíčku s editorem Kakoune

V případě, že se vám nechce provádět lokální překlad Kakoune, je alternativně možné použít již předpřipravené balíčky s tímto textovým editorem. Na systému Fedora lze použít Copr, konkrétně tento balíček. Copr nejdříve povolíme a poté balíček nainstalujeme běžným způsobem:

# dnf copr enable jkonecny/kakoune
# dnf install kakoune

Na Arch Linuxu se samozřejmě použije pacman:

$ pacman -S kakoune

6. Spuštění editoru a první krůčky při práci s ním

Editor Kakoune se spouští příkazem kak:

$ kak

Obrázek 13: V případě, že není specifikováno jméno souboru, použije se takzvaný *scratch* buffer, což je termín převzatý z Emacsu.

Tomuto příkazu můžete na příkazové řádce předat i název souboru, který potřebujete editovat:

$ kak .bashrc

Obrázek 14: Otevření specifikovaného souboru zadáním jména souboru z příkazové řádky.

Dále je možné v případě potřeby specifikovat i číslo řádku (popř. dokonce i sloupce), na který se má přesunout textový kurzor:

$ kak .bashrc +42

Po spuštění se editor nachází v takzvaném normálním režimu (normal mode), který má naprosto stejný význam, jako v textovém editoru Vim. V normálním režimu se typicky pracuje s textovým kurzorem (jeho přesun v rámci editovaného textu), volají se základní editační operace a taktéž se přechází do dalších režimů s využitím k tomu určených klávesových zkratek.

Obrázek 15: Po otevření souboru se na základě jeho jména a obsahu určuje, jakým způsobem se má provést obarvení syntaxe.

7. Režimy editoru Kakoune

Jak jsme si již řekli v úvodní kapitole, je Kakoune modálním textovým editorem, tj. aplikace se v daný okamžik nachází vždy v jednom uživatelem zvoleném režimu (módu). Výchozím režimem je takzvaný normální režim (normal mode), ve kterém editor očekává příkazy pro pohyb kurzoru v textu, pro výběr textu (selection), další editační operace a popř. i příkazy, které provedou přepnutí režimu. V následující tabulce jsou jednotlivé režimy vypsány. Povšimněte si, že se seznam režimů v některých ohledech odlišuje od editoru Vi/Vim, ovšem dva základní režimy (normal a insert) jsou zachovány a navíc prompt mode do značné míry odpovídá Vimovskému command mode spojeného s podrežimy pro vyhledávání:

Název režimu Stručný popis
Normal mode výchozí režim, v němž lze přesouvat kurzor v rámci bufferu, provádět základní editaci a přecházet do dalších režimů
Insert mode režim zápisu (většinou vkládání) textu do aktivního bufferu
Goto mode přesuny v rámci bufferu či mezi buffery
View mode ovládání textového a výběrového kurzoru, práce s oknem
Menu mode tento režim se zapíná z více míst a pozná se podle toho, že je zobrazeno menu; vypíná se výběrem položky menu
Prompt mode odpovídá kombinaci Vimovského příkazového a vyhledávacího režimu (příkazy začínají dvojtečkou, vyhledávání typicky lomítkem)
Object mode režim výběru takzvaných textových objektů
User mode ve výchozím nastavení je režim prázdný a lze do něj přidávat klávesové zkratky a příkazy namapované na tyto zkratky (díky tomu tyto zkratky nebudou kolidovat s ostatními režimy)

Obrázek 16: Stručný popis jednotlivých režimů získáte příkazem :doc modes, popř. příkazem :help modes.

8. Přesuny textového kurzoru v normálním režimu

V normálním režimu (který je, jak již víme, výchozí) je možné specifikovat příkazy pro pohyby v textu, tj. pro přesuny textového kurzoru po editovaném dokumentu. Některé základní příkazy jsou zadávány jediným znakem, popř. kombinací klávesy Ctrl s jinou klávesou. V první tabulce jsou vypsány základní příkazy, které jsou většinou kompatibilní s Vimem:

# Příkaz/zkratka Stručný popis
1 h přesun kurzoru o jeden znak doleva (jako ve Vimu)
2 j přesun kurzoru o jeden řádek dolů (jako ve Vimu)
3 k přesun kurzoru o jeden řádek nahoru (jako ve Vimu)
4 l přesun kurzoru o jeden znak doprava (jako ve Vimu)
5    
6 Page Up přesun o celou viditelnou stránku nahoru
7 Ctrl+B dtto, přesun o celou viditelnou stránku nahoru
8 Page Down přesun o celou viditelnou stránku dolů
9 Ctrl+F dtto, přesun o celou viditelnou stránku dolů
10 Ctrl+U přesun o polovinu viditelné stránky nahoru
11 Ctrl+D přesun o polovinu viditelné stránky dolů
Poznámka: před jednotlivé příkazy určené pro pohyb kurzoru můžete přidat počet opakování. Tj. pokud se potřebujete v rámci aktuálně editovaného bufferu posunout o deset řádků níže, postačuje použít příkaz 10j (zde není oproti Vimu žádný podstatný rozdíl).

To však samozřejmě není zdaleka vše, protože po zadání prefixu g (mnemotechnická zkratka od goto) je možné zadat další příkazy určené pro pohyb kurzoru. Tyto příkazy jsou sice odlišné od Vimu, ovšem (zejména pro začínající uživatele) mohou být snadněji zapamatovatelné:

# Příkaz/zkratka Stručný popis
1 gg přechod na začátek bufferu (první textový řádek, jako ve Vimu)
2 gk stejný význam jako předchozí příkaz
3 gj přechod na poslední řádek bufferu
3 ge přechod na konec bufferu (konec posledního řádku)
     
4 gh přechod na začátek řádku, na němž se nachází kurzor
5 gl přechod na konec řádku, na němž se nachází kurzor
     
6 gt přechod na první viditelný řádek (top)
7 gb přechod na poslední viditelný řádek (bottom)
8 gc přechod na prostřední viditelný řádek (center)
     
9 g. přechod na text, který byl naposledy změněn či editován

Obrázek 17: Po stisku klávesy g se zobrazí dostupné příkazy pro přesun kurzoru.

Pro zajímavost si ještě ukažme, jak se odlišují některé příkazy pro pohyb kurzoru v Kakoune a ve Vimu:

# Kakoune Vim
1 gg gg
2 gk gg
3 gj G
3 ge G$
     
4 gh 0
5 gl $
     
6 gt H
7 gb L
8 gc M
     
9 g. `.
Poznámka: v předchozí tabulce můžeme vidět logiku přiřazení příkazů v Kakoune. Například čtveřice kláves h, j, k, l slouží pro pohyb kurzoru po jednotlivých znacích, popř. řádcích, zatímco při použití prefixu g se kurzor bude pohybovat po celém řádku (začátek/konec) nebo na začátek konec celého bufferu. Taktéž příkazy, které jsou ve Vimu přiřazeny klávesám H, L, M (higher, lower, middle), byly zaměněny za příkazy, jenž opět začínají prefixem g (goto).

9. Výběr textu a základní operace s vybranou oblastí

Editor Vim nabízí uživatelům takzvaný vizuální režim spouštěný klávesou v, V či Ctrl+V. V tomto režimu je možné nejprve vybrat určitý text a posléze s tímto textem provádět další operace (vymazání, změna/náhrada atd.). V editoru Kakoune je výběr textu jednou z nejdůležitějších operací, protože zde neexistuje (jak již víme) kombinace operátor+příkaz_pro_pohyb_kurzoru. Proto zde také namísto vizuálního režimu, který vyžaduje stisk jedné klávesy navíc, nalezneme celou skupinu příkazů sloužících pro výběr části textu:

# Příkaz/zkratka Stručný popis
1 H rozšíření výběru o jeden znak doleva
2 J rozšíření výběru o další řádek
3 K rozšíření výběru o předchozí řádek
4 L rozšíření výběru o jeden znak doprava
     
5 b výběr od pozice kurzoru na začátek předchozího slova
6 B dtto, ovšem rozšíření výběru
7 e výběr od pozice kurzoru do konce slova
8 E dtto, ovšem rozšíření výběru
9 w výběr od pozice kurzoru na začátek dalšího slova
10 W dtto, ovšem rozšíření výběru
     
11 x výběr celého řádku
12 X dtto, ovšem rozšíření výběru
     
13 f výběr včetně specifikovaného znaku (find)
14 F dtto, ovšem rozšíření výběru
15 t výběr až do specifikovaného znaku (kromě tohoto znaku – till)
16 T dtto, ovšem rozšíření výběru
     
17 G jako příkaz g, ovšem s výběrem
18 n výběr regulárním výrazem (zadaným dříve)
19 N dtto, ovšem rozšíření výběru
     
20 Home výběr do začátku řádku
21 End výběr do konce řádku
Poznámka: jedním z důvodů, proč Kakoune pro pohyb v textu používá příkazy s prefixem g spočívá právě v tom, že se příkazy zadávané velkým písmenem typicky používají právě pro výběr textu, který je zde důležitější, než „pouhé“ pohyby kurzoru.

Podporovány jsou samozřejmě i různé textové objekty:

# Příkaz/zkratka Stručný popis
1 [ začátek výběru podle zvoleného objektu
2 ] konec výběru podle zvoleného objektu
3 ( jako [, ovšem rozšíření výběru
4 ) jako ], ovšem rozšíření výběru

Podporované textové objekty jsou vypsány na dalším screenshotu:

Obrázek 18: Kontextové menu se základními příkazy pro výběr části textu s využitím takzvaných textových objektů.

Poznámka: pokud vám chybí režim výběru vertikálního (sloupcového) bloku, můžete si vyzkoušet plugin kakoune-vertical-selection.

10. Další příkazy používané v normálním režimu

V normálním režimu nalezneme i mnohé další užitečné příkazy. Poměrně velké množství příkazů (převzatých z Vimu) slouží pro přechod do vkládajícího režimu, ovšem ještě před tímto přechodem se provede nějaká operace:

# Příkaz/zkratka Stručný popis
1 a přechod do vkládacího režimu za pozicí kurzoru (append)
2 i přechod do vkládacího režimu před pozicí kurzoru (insert)
3 A přechod do vkládacího režimu na začátku řádku
4 I přechod do vkládacího režimu na konci řádku
     
5 o přechod do vkládacího režimu na začátku nově vytvořeného řádku pod kurzorem
6 O přechod do vkládacího režimu na začátku nově vytvořeného řádku nad kurzorem
     
7 c změna/modifikace vybraného textu

Další užitečné příkazy jsou opět do značné míry inspirovány Vimem:

# Příkaz/zkratka Stručný popis
1 d vymazání vybraného textu
2 r přepis znaku
3 p vložení textu ze schránky za kurzor
4 P vložení textu ze schránky před kurzor
     
5 q spuštění makra (ve Vimu @)
6 Q nahrávání makra (ve Vimu q)
     
7 v přepnutí do view režimu
8 ~ změna velikosti písmen (upper case)
9 ` změna velikosti písmen (lower case)
     
10 . opakování posledního příkazu

Obrázek 19: Integrovaná nápověda.

11. Výběry a provedení operací na více místech textu

Práce s výběry je v editoru Kakoune ještě dále rozšířena možností manipulace s několika výběry současně. Typicky se přitom vytváří více výběrů (bloků) klávesovou zkratkou Alt+příkaz_výběru, například Alt+x pro výběr jednotlivých řádků atd. Podívejme se nyní na typickou operaci – změnu stejného jména funkce na více řádcích.

Obrázek 20: Jednou z možností řešení, které známe i z Vimu, je výběr celého testového objektu ohraničeného složenými závorkami a použitím příkazu substitute. Jedná se o klasický způsob řešení tohoto problému.

Obrázek 21: Můžeme ovšem provést i několikanásobný výběr. Povšimněte si, že se nám současně znásobil i počet kurzorů (ty jsou umístěny na znaku A těsně za vybranými bloky).

Obrázek 22: Nyní se veškeré operce, například c (change) provedou nikoli na jediném místě v textu, ale na všech vybraných blocích. Tyto bloky samozřejmě nemusí nutně ležet pod sebou.

Poznámka: navíc je možné při definici výběru použít regulární výraz, což se hodí zejména při práci se zdrojovými kódy.

12. Registry

Dalším užitečným a často používaným nástrojem nabízeným textovým editorem Kakoune jsou takzvané registry. Jedná se o interní proměnné editoru pojmenované jedním znakem, které v první řadě slouží pro kopii či přenos editovaných textů pomocí příkazů c (change), s (substitute), d (delete), y (yank) a p (paste), což vlastně znamená, že registry lze využít ve funkci pojmenovaných schránek (clipboard). Pro výběr registru pro další operaci slouží příkaz ", za nímž se specifikuje jednopísmenné jméno registru. Dále je možné ve vkládacím režimu použít klávesovou zkratku Ctrl+registr pro vložení obsahu registru na místo, na němž se nachází textový kurzor.

Například příkaz "ay slouží pro přesun vybraného textu do registru nazvaného „a“, zatímco příkaz "ap pro vložení obsahu registru „a“ za aktuální pozici kurzoru.

Obrázek 23: Po stisku klávesy " (sloužící pro výběr registru) se opět zobrazí nápověda s funkcemi jednotlivých registrů.

13. Použití většího množství oken

Editor Kakoune neobsahuje podporu pro rozdělení plochy terminálu na několik samostatných oblastí, v nichž by se zobrazovaly jednotlivé editované buffery. To by se sice mohlo zdát jako dosti velká nevýhoda v porovnání s některými jinými editory, ovšem Kakoune namísto toho používá odlišnou taktiku – práci s okny nechává buď na správci oken nebo na nástrojích screen a tmux. Pokud je například Kakoune spuštěn v sezení tmuxu, lze dosáhnout následujících možností:

Obrázek 24: K dispozici je více příkazů pro vytvoření nového okna (například s novým bufferem). Jeden z těchto příkazů se jmenuje tmux-new-window a bude funkční ve chvíli, kdy je Kakoune spuštěn uvnitř sezení tmuxu.

Obrázek 25: Tři samostatné instance Kakoune běžící v rámci sezení tmuxu.

Obrázek 26: Příkazy dostupné z režimu „view“ slouží k práci s bufferem otevřeným v aktivním okně, popř. pro přepínání mezi buffery.

Poznámka: podporován je i správce oken i3.

14. Některé další možnosti poskytované editorem Kakoune

Podívejme se ještě na některé další možnosti, které jsou poskytované textovým editorem Kakoune a které například ve Vimu nenalezneme (popř. nalezneme, ale v jiné podobě). Týká se to i nastavení editoru, jenž je rozděleno do několika kategorií. Příkaz :set je tedy následován jménem kategorie (například global, buffers, current atd.) a teprve poté názvem konfigurační volby. Navíc je možné volby vybírat přímo z menu:

Obrázek 27: Kontextové menu se všemi možnostmi nastavení v aktuálním bufferu.

Kontextové menu se používá ve všech situacích, kdy je na výběr několik možností. Jedná se například o nabídku textu pro doplnění. Povšimněte si, že se nenabízí pouze slova začínající na písmeno „u“, ale i slova, které toto písmeno pouze obsahují (s nižší relevancí):

Obrázek 28: Kontextové menu s nabídkou textu pro doplnění.

Menu (a nápověda) se zobrazí i při otevírání textového souboru příkazem :e či :edit:

Obrázek 29: Nápověda a kontextové menu se seznamem souborů, z nichž jeden bude otevřen pro editaci.

Integrovaná nápověda sice není příliš rozsáhlá (určitě ne v porovnání s Vimem), ovšem je taktéž rozdělena do několika kategorií:

Obrázek 30: Integrovaná nápověda s obsahem.

Užitečné je, že při zadání jen části příkazu se nabídnou všechny příkazy, které dané znaky obsahují (a to nikoli pouze na začátku). To se hodí v mnoha situacích, například při příkazu new-window se nabídne již zmíněný příkaz tmux-new-window apod.:

Obrázek 31: I při zápisu začátku příkazu se zobrazí menu se všemi příkazy, které odpovídají zapsanému textu. A samozřejmě nesmíme zapomenout na pana sponku s nápovědou.

15. Krátká přehlídka dalších textových editorů inspirovaných Vimem

Ve skutečnosti není Kakoune zdaleka jedinou novější aplikací, která je inspirována editory Vi a Vim. Kromě aplikací zmíněných ve třetí kapitole, které si z dvojice Vi/Vim vzaly většinou pouze část modálního ovládání, existuje i několik pokusů o náhradu Vimu odlišným editorem s podobnými vlastnostmi, popř. pochopitelně s nějakým vylepšením. Některé (pokusy o) náhradu Vimu jsou zmíněny v navazujících kapitolách.

Poznámka: prozatím se jen krátce zmíníme o editoru Neovim, protože mu bude kvůli rozsahu a množství vylepšení oproti Vimu věnován samostatný článek.

16. PyVim

Mezi jednu z těchto aplikací, i když prozatím pouze ve stadiu vývoje, patří projekt nazvaný PyVim, jehož název prozrazuje vše podstatné – tento projekt je reinkarnací Vimu, ovšem kompletně přepsanou z programovacího jazyka C do Pythonu. Používají se přitom pochopitelně odlišné přístupy i odlišné knihovny a navíc je PyVim prozatím v experimentální fázi, což je ostatně patrné i při pohledu na screenshot s úvodní zprávou zobrazenou uživateli. PyVim opět primárně běží v terminálu, takže je použitelný jak na klientských počítačích, tak i na serverech.

Obrázek 32: Informace o experimentální fázi projektu PyVim.

Nutno poznamenat, že prozatím nefungují ani některé základní zkratky, které uživatelé Vimu dennodenně používají.

Obrázek 33: Integrovaná nápověda.

Obrázek 34: Podporováno je i dělení okna terminálu na jednotlivé buffery.

17. AMP – textový editor naprogramovaný v Rustu

Technologicky zajímavějším počinem je projekt nazvaný AMP, což je zcela nová implementace textového editoru inspirovaná Vimem. Tentokrát se však pro implementaci používá programovací jazyk Rust, s nímž jsme se již na stránkách Rootu seznámili v rámci samostatného seriálu. Opět se jedná o aplikaci primárně určenou pro spuštění v terminálu, se všemi výhodami ale samozřejmě i některými zápory, které toto ověřené řešení přináší.

18. Elvis

V minulosti byl v mnoha distribucích Linuxu (zejména v distribucích šířených na disketách) jako základní textový editor využíván nástroj Elvis, což je další editor inspirovaný stařičkým editorem Vi. Důvody, které vedly k použití Elvise na minimalisticky pojatých disketových instalacích spočívají v jeho menší velikosti (i Vim je však v případě potřeby možné poměrně úspěšně zmenšit, ovšem za cenu ztráty některých vlastností) a nezávislosti na dalších knihovnách. I staticky slinkovaná verze textového editoru Elvis totiž zabere pouze cca 200kB (alespoň na 32bitové platformě x86). Menší velikost binárního souboru se projevuje i ve velikosti obrazu spuštěného editoru v operační paměti. Někdo možná miniinstalace Linuxu nepovažuje za plnohodnotné systémy, pro jednoduchý router či tiskový server se však mnohdy jedná o ideální, funkční a přitom nekomplikovanou záležitost; podobně je tomu v případě různých „live distribucí“ (například původní verze Slaxu používaly editor Elvis a nikoli Vim).

Obrázek 35: Editace zdrojového kódu v textovém editoru Elvis. Povšimněte si, že je podporováno i zvýraznění syntaxe.

Editor Elvis, jehož autorem je Steve Kirkendall, se sice snaží dodržovat co nejlepší zpětnou kompatibilitu s původním editorem vi, ovšem najdeme zde i množství nových vlastností, které byly později převzaty do Vimu. Pravděpodobně nejzajímavější vlastností, která je pro textový editor Elvis typická, je podpora pro několik režimů zobrazení textů – tyto režimy je možné v případě potřeby měnit s využitím příkazu :display. Režimy zobrazení v podstatě pracují jako obousměrné filtry, které převádí interní podobu textu na text zobrazený uživateli a naopak – editace prováděná uživatelem se aplikuje na interní podobu textu v bufferu, což je uživatelsky přívětivé a přitom se Elvis přibližuje možnostem nabízeným WYSIWYG editory.

Obrázek 36: Informace o verzi editoru Elvis. Jak je ze zprávy patrné, není tento editor dále aktivně vyvíjen.

Mezi podporované režimy zobrazení patří například režim HTML, při kterém je editovaný soubor interpretován jako dokument napsaný v jazyce HTML. V tomto režimu může Elvis do určité míry nahradit WWW prohlížeč, samozřejmě to platí pouze pro jednodušší stránky bez složitého formátování a stylů (celá nápověda je k tomuto editoru psána přímo v jednoduchém HTML, takže ji lze bez problému zobrazit). Režimu HTML se do značné míry podobá i režim TeXu, který je však do značné míry omezen repertoárem rozpoznávaných klíčových slov. Dalším podporovaným režimem je režim náhledu manuálových stránek, kdy se Elvis chová podobně jako příkaz man s tím rozdílem, že je možné manuálové stránky i editovat. Ne všechny příkazy značkovacího jazyka troff (ve kterém jsou stránky psané) jsou podporovány, repertoár značek je však pro běžnou práci dostačující. Zejména na systémech Microsoft Windows (kde oba editory samozřejmě pracují) je to cenná vlastnost, protože na tomto systému se implicitně žádný prohlížeč manuálových stránek nenachází.

Obrázek 37: Režim editace binárních souborů podporovaný textovým editorem Elvis.

Zvláštní postavení zaujímá režim hexadecimálního náhledu na editovaný soubor, při kterém se editor Elvis chová jako běžný hexadecimální editor. Tento režim mi osobně ve Vimu chybí nejvíce, protože náhražka ve formě filtru xxd je značně nedokonalá. Zatímco předchozí režimy zobrazení lze použít spíše pasivně pro prohlížení, režim hexadecimálního náhledu je při práci s binárními soubory velmi užitečný.

Editor Elvis poskytuje svým uživatelům mnoho dalších výborných funkcí, z nichž však uvedu z mého pohledu pouze ty nejzajímavější:

  1. Regulární výrazy (resp. „magické sekvence“) lze psát ve stylu podobném Perlu, což jistě mnozí ocení.
  2. Oproti Vimu má Elvis rozšířený příkaz show.
  3. Makra se nemusí psát pouze pomocí příkazu :map, lze použít mnohem flexibilnější :alias
  4. Pomocí operátoru = lze provést vyčíslení výrazu, avšak pouze při výběru bloku pomocí příkazu v. V opačném případě se jedná o formátovací příkaz, podobně jako ve vi či Vimu, takže kompatibilita je zachována.
  5. Přes soubor elvis.msg je možné provést překlad všech hlášení programu bez nutnosti zásahu do zdrojového kódu.

19. Minimalistický editor e3

Dalším celoobrazovkovým textovým editorem alespoň částečně odvozeným od starobylého vi, je aplikace, která se jmenuje e3. Již samotné pojmenování tohoto editoru naznačuje, že se jeho autor Albrecht Kleine snažil o vytvoření minimalistického nástroje, což se skutečně (alespoň podle mého názoru) povedlo. Textový editor e3 je totiž naprogramován v assembleru mikroprocesorů řady x86. Zdrojový kód původní verze e3 je uložen v jediném souboru s přibližně 6500 řádky optimalizovaného assembleru určeného pro překlad do 32bitového režimu (pro překlad je možné použít například známý assembler NASM). Pro 64bitový režim existuje jednoduchý skript, který zdrojový kód e3 jednoduše transformuje (odlišná jména registrů apod.), ovšem nevyužije žádných nových vlastností 64bitového režimu.

Kromě toho existuje i šestnáctibitová verze editoru e3 určená pro systém DOS či pro šestnáctibitové (real mode) zavaděče a různé utility. Současně existuje i varianta e3 přepsaná do programovacího jazyka C, aby bylo možné tento nepochybně zajímavý editor používat například na počítačích vybavených mikroprocesory ARM či MIPS. My se však v dalším textu budeme zabývat pouze originální 32bitovou a 64bitovou variantou e3 naprogramovanou v assembleru.

Obrázek 38: Spuštění editoru e3 v režimu emulace klávesových zkratek WordStaru.

Binární obraz e3 je v porovnání s ostatními moderními textovými editory velmi malý – podle použitého režimu (32bit/64bit) je spustitelný soubor /usr/bin/e3 velký přibližně 13 či 17 kB a žádné další soubory nejsou pro práci s e3 zapotřebí. Textový editor e3 přitom nabízí uživatelům poměrně velké množství funkcí. Asi nejzajímavější je existence několika režimů práce editoru – ten totiž dokáže napodobit editor WordStar (spuštěno přes link e3ws), Emacs (spuštěno přes link e3em), Vi/Vim (spuštěno přes link e3vi) Pico/Nano (spuštěno přes link e3pi) či NEdit (Nirvana Editor) (spuštěno přes e3ne). Režimy je možné dokonce přepínat i za běhu editoru a součástí je i obrazovka s klávesovými zkratkami (to vše je samozřejmě uloženo ve zmíněných 13 či 17 kB). e3 nabízí dokonce i funkci „undo“, obsahuje kalkulačku (dokáže spočítat i složitý aritmetický výraz zapsaný v textu!) a – což je v našich podmínkách velmi důležité – podporuje plnohodnotný osmibitový vstup znaků. Režim kompatibility s editorem vi je překvapivě dobrý, ovšem například uživatele Vimu některé neexistující příkazy a režimy budou pravděpodobně mrzet (nejvíc asi absence plnohodnotného vizuálního režimu).

Obrázek 39: Obrazovka s nápovědou je dostupná za všech okolností a přitom je vždy indikováno, jakou klávesovou zkratkou se nápověda zobrazí.

Vzhledem ke zcela minimální velikosti tohoto textového editoru asi nepřekvapí, že některé vlastnosti nejsou implementovány. Týká se to zejména podpory pro zarovnávání textu a automatického odřádkování i přerovnání odstavců, což je však funkce užitečná jen v některých případech, nikoli například při úpravách konfiguračních souborů či zdrojových kódů. Taktéž chybí podpora pro využití regulárních výrazů při hledání a nahrazování. To je však vyřešeno elegantním způsobem – funkcí pro poslání vybraného textu do filtru sed, což (znalým) uživatelům otevírá široké možnosti použití. e3 se pravděpodobně nestane jediným textovým editorem, který by byl vhodný pro všechny příležitosti, ovšem ukazuje, že i velmi krátký program dokáže být překvapivě mocný a přitom rychlý a současně nenáročný na systémové zdroje.

Obrázek 40: Editace zdrojového kódu napsaného v programovacím jazyce C.

20. Odkazy na Internetu

  1. Kakoune: A Better Code Editor Heavily Inspired by Vim
    https://www.tecmint.com/kakoune-better-code-editor-for-linux/
  2. Kakoune demo
    https://vimeo.com/82711574
  3. 6 Best Vi/Vim-Inspired Code Editors for Linux
    https://www.tecmint.com/vi-vim-inspired-code-editors-for-linux/
  4. Why Kakoune — The quest for a better code editor
    https://kakoune.org/why-kakoune/why-kakoune.html
  5. Kakoune design
    https://github.com/mawww/ka­koune/blob/master/doc/desig­n.asciidoc
  6. Kakoune (modální textový editor)
    http://kakoune.org/
  7. Kakoune: Selections
    https://github.com/mawww/ka­koune/wiki/Selections
  8. Migrating from Vim
    https://github.com/mawww/ka­koune/wiki/Migrating-from-Vim
  9. kakoune-vertical-selections
    https://github.com/occivink/kakoune-vertical-selection
  10. Evil (Emacs Wiki)
    https://www.emacswiki.org/emacs/Evil
  11. Evil (na GitHubu)
    https://github.com/emacs-evil/evil
  12. Evil (na stránkách repositáře MELPA)
    https://melpa.org/#/evil
  13. Evil Mode: How I Switched From VIM to Emacs
    https://blog.jakuba.net/2014/06/23/e­vil-mode-how-to-switch-from-vim-to-emacs.html
  14. Vrapper aneb spojení možností Vimu a Eclipse
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/
  15. Vrapper aneb spojení možností Vimu a Eclipse (část 2: vyhledávání a nahrazování textu)
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse-cast-2-vyhledavani-a-nahrazovani-textu/
  16. Emacs/Evil-mode – A basic reference to using evil mode in Emacs
    http://www.aakarshnair.com/posts/emacs-evil-mode-cheatsheet
  17. From Vim to Emacs+Evil chaotic migration guide
    https://juanjoalvarez.net/es/de­tail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/
  18. Introduction to evil-mode {video)
    https://www.youtube.com/wat­ch?v=PeVQwYUxYEg
  19. Vim-style keybinding in Emacs/Evil-mode
    https://gist.github.com/tro­yp/6b4c9e1c8670200c04c16036805773d8
  20. Evil-surround
    https://github.com/emacs-evil/evil-surround
  21. Spacemacs
    http://spacemacs.org/
  22. Neovim: literally the future of vim
    https://neovim.io/
  23. AMP – A Vi/Vim Inspired Text Editor for Linux Terminal
    https://www.tecmint.com/amp-vi-vim-inspired-text-editor-for-linux/
  24. Amp: A text editor for your terminal
    https://github.com/jmacdonald/amp
  25. Stránky projektu Amp.rs
    https://amp.rs/
  26. Dokumentace k editoru Amp
    https://amp.rs/docs/
  27. Vis: a vi-like editor based on Plan 9's structural regular expressions
    https://github.com/martanne/vis
  28. Very opinionated Node.JS VI clone
    https://github.com/mikesmullin/nvi
  29. PyVim: Pure Python Vim clone
    https://github.com/prompt-toolkit/pyvim
  30. pyvim 2.0.24 na PyPi
    https://pypi.org/project/pyvim/
  31. vim2elvis (1)
    https://www.root.cz/clanky/vim2elvis-1/
  32. vim2elvis (2)
    https://www.root.cz/clanky/vim2elvis-2/
  33. Seriál Textový editor Vim jako IDE
    https://www.root.cz/serialy/textovy-editor-vim-jako-ide/
  34. Obsah Rootu označený nálepkou Vim
    https://www.root.cz/n/vim/
  35. Atom: moderní textový editor
    https://www.root.cz/clanky/atom-moderni-textovy-editor/
  36. Atom: moderní textový editor (dokončení)
    https://www.root.cz/clanky/atom-moderni-textovy-editor-dokonceni/
  37. Why I switched to VIM from Visual Studio Code
    https://freshman.tech/from-vscode-to-vim/
  38. VSCodeVim
    https://marketplace.visual­studio.com/items?itemName=vsco­devim.vim
  39. VSCodeVim/Vim na GitHubu
    https://github.com/VSCodeVim/Vim
  40. How Vim killed Atom and VSCode on my Machine
    https://medium.com/@aswinmohanme/how-vim-killed-atom-and-vscode-723a68ad59dc