Obsah
1. Kakoune: moderní textový editor s modálním ovládáním
3. Další vybrané aplikace inspirované ovládáním Vi/Vimu
4. Instalace textového editoru Kakoune
5. Použití předkompilovaného balíčku s editorem Kakoune
6. Spuštění editoru a první krůčky při práci s ním
8. Přesuny textového kurzoru v normálním režimu
9. Výběr textu a základní operace s vybranou oblastí
10. Další příkazy používané v normálním režimu
11. Výběry a provedení operací na více místech textu
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
17. AMP – textový editor naprogramovaný v Rustu
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ů.
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
$ 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ů |
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. | `. |
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 |
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ů.
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.
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.
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.
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ší:
- Regulární výrazy (resp. „magické sekvence“) lze psát ve stylu podobném Perlu, což jistě mnozí ocení.
- Oproti Vimu má Elvis rozšířený příkaz show.
- Makra se nemusí psát pouze pomocí příkazu :map, lze použít mnohem flexibilnější :alias
- 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.
- 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
- Kakoune: A Better Code Editor Heavily Inspired by Vim
https://www.tecmint.com/kakoune-better-code-editor-for-linux/ - Kakoune demo
https://vimeo.com/82711574 - 6 Best Vi/Vim-Inspired Code Editors for Linux
https://www.tecmint.com/vi-vim-inspired-code-editors-for-linux/ - Why Kakoune — The quest for a better code editor
https://kakoune.org/why-kakoune/why-kakoune.html - Kakoune design
https://github.com/mawww/kakoune/blob/master/doc/design.asciidoc - Kakoune (modální textový editor)
http://kakoune.org/ - Kakoune: Selections
https://github.com/mawww/kakoune/wiki/Selections - Migrating from Vim
https://github.com/mawww/kakoune/wiki/Migrating-from-Vim - kakoune-vertical-selections
https://github.com/occivink/kakoune-vertical-selection - Evil (Emacs Wiki)
https://www.emacswiki.org/emacs/Evil - Evil (na GitHubu)
https://github.com/emacs-evil/evil - Evil (na stránkách repositáře MELPA)
https://melpa.org/#/evil - Evil Mode: How I Switched From VIM to Emacs
https://blog.jakuba.net/2014/06/23/evil-mode-how-to-switch-from-vim-to-emacs.html - Vrapper aneb spojení možností Vimu a Eclipse
https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/ - 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/ - Emacs/Evil-mode – A basic reference to using evil mode in Emacs
http://www.aakarshnair.com/posts/emacs-evil-mode-cheatsheet - From Vim to Emacs+Evil chaotic migration guide
https://juanjoalvarez.net/es/detail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/ - Introduction to evil-mode {video)
https://www.youtube.com/watch?v=PeVQwYUxYEg - Vim-style keybinding in Emacs/Evil-mode
https://gist.github.com/troyp/6b4c9e1c8670200c04c16036805773d8 - Evil-surround
https://github.com/emacs-evil/evil-surround - Spacemacs
http://spacemacs.org/ - Neovim: literally the future of vim
https://neovim.io/ - AMP – A Vi/Vim Inspired Text Editor for Linux Terminal
https://www.tecmint.com/amp-vi-vim-inspired-text-editor-for-linux/ - Amp: A text editor for your terminal
https://github.com/jmacdonald/amp - Stránky projektu Amp.rs
https://amp.rs/ - Dokumentace k editoru Amp
https://amp.rs/docs/ - Vis: a vi-like editor based on Plan 9's structural regular expressions
https://github.com/martanne/vis - Very opinionated Node.JS VI clone
https://github.com/mikesmullin/nvi - PyVim: Pure Python Vim clone
https://github.com/prompt-toolkit/pyvim - pyvim 2.0.24 na PyPi
https://pypi.org/project/pyvim/ - vim2elvis (1)
https://www.root.cz/clanky/vim2elvis-1/ - vim2elvis (2)
https://www.root.cz/clanky/vim2elvis-2/ - Seriál Textový editor Vim jako IDE
https://www.root.cz/serialy/textovy-editor-vim-jako-ide/ - Obsah Rootu označený nálepkou Vim
https://www.root.cz/n/vim/ - Atom: moderní textový editor
https://www.root.cz/clanky/atom-moderni-textovy-editor/ - Atom: moderní textový editor (dokončení)
https://www.root.cz/clanky/atom-moderni-textovy-editor-dokonceni/ - Why I switched to VIM from Visual Studio Code
https://freshman.tech/from-vscode-to-vim/ - VSCodeVim
https://marketplace.visualstudio.com/items?itemName=vscodevim.vim - VSCodeVim/Vim na GitHubu
https://github.com/VSCodeVim/Vim - How Vim killed Atom and VSCode on my Machine
https://medium.com/@aswinmohanme/how-vim-killed-atom-and-vscode-723a68ad59dc