Režim VI
Úvod

Režim VI v editoru Kate je projekt, jehož cílem je zavést editaci v modálním režimu podobnou Vimu do textového editoru Kate a v širším smyslu i do dalších programů KDE, které využívají stejnou editační komponentu. Projekt vznikl v roce 2008 v rámci programu Google Summer of Code, kde byla naprogramována veškerá základní funkcionalita. Pokračujeme v údržbě a dalším vývoji tohoto kódu a počet funkcí, které v porovnání s Vimem chybí, se pomalu snižuje. Většina uživatelů Vimu již bude v režimu VI v Kate pracovat produktivně. Seznam toho, co ještě chybí, najdete na konci stránky.
Tato stránka má sloužit jako aktuální přehled této práce.
Nastavení → Nastavit Kate… → Úpravy → Vstupní režim VI.
Lze jej také přepínat pomocí nastavení "Vstupní režim VI" v nabídce "Úpravy". (Výchozí klávesová zkratka je Meta+Ctrl+V – kde Meta obvykle představuje klávesu Windows).
Cíle
Cílem režimu VI není zcela nahradit Vim a podporovat všechny jeho funkce. Jeho účelem je zpřístupnit "Vimovský způsob" úprav textu a osvojené Vimovské návyky programům, které jako svůj interní editor používají textový editor Kate. Mezi tyto programy patří
- Textový editor Kate
- KWrite – jednoduchý textový editor pro KDE
- KDevelop – Pokročilé integrované vývojové prostředí (IDE) pro řadu programovacích jazyků
- Kile – editor LaTeXu
Režim VI se snaží hladce integrovat do programů a tam, kde to dává smysl, se odchyluje od chování programu Vim. Například příkaz :w v režimu VI v editoru Kate otevře dialogové okno pro uložení.
Nekompatibilita s programem Vim
Režim VI v editoru Kate má jen několik funkcí, které nejsou kompatibilní s Vimem (nepočítáme-li chybějící funkce). Jsou uvedeny níže spolu s příslušnými důvody.
- Kate: Klávesy
UaCtrl+rslouží k opakování akce
Vim: Klávesová zkratkaCtrl+rslouží k normálnímu opakování akce, klávesaUse používá k vrácení všech posledních změn v jednom řádku
Důvodem, proč klávesaUv režimu VI v Kate funguje jako opakování akce, je to, že klávesová zkratkaCtrl+rje ve výchozím nastavení vyhrazena pro funkci nahrazení (vyhledání a nahrazení) v Kate. Ve výchozím nastavení režim VI nepřepisuje klávesové zkratky programu Kate (toto lze nastavit v Nastavení → Nastavit Kate… → Úpravy → Vstupní režim VI), proto musí být akce znovu provést dostupná také jako "běžné" stisknutí klávesy. Kromě toho se chování příkazuUve Vimu příliš nehodí k internímu systému vrácení zpět v programu Kate, takže by jeho podpora byla i tak složitá. - Kate: Příkaz
:printzobrazí dialogové okno "Tisk"
Vim::printvytiskne řádky zadaného rozsahu, stejně jako jeho předchůdce ed. Příkazy jako :print jsou k dispozici nejen v režimu VI, ale i pro uživatele, kteří používají "běžný" Kate – proto jsme se rozhodli, že příkaz:printotevře dialogové okno pro tisk – v souladu s principem "nejmenšího překvapení" namísto napodobování chování Vimu. - Kate:
Yzkopíruje text až na konec řádku.
Vim:Yzkopíruje celý řádek, stejně jakoyy. Chování příkazuYve VI je v praxi chybou. U příkazů pro změnu i mazání provedecc/ddakci na aktuálním řádku aC/Dbude fungovat od sloupce kurzoru až do konce řádku. Nicméně jakyy, takYzkopírují aktuální řádek. V režimu VI v Kate zkopírujeYtext až do konce řádku. To je v dokumentaci k Vimu popsáno jako "logičtější". - Kate:
:mapupraví vybrané řádky dokumentu pomocí zadaného výrazu v JavaScriptu.
Vim::mappřidá zadané přiřazení do normálního a vizuálního režimu. Příkaz "map" byl již vyhrazen pro program Kate; ve verzi 4.12 a novějších jej můžete nahradit kombinací příkazů:nmapa:vmap.
Podporované příkazy
Podporované příkazy v normálním/vizuálním režimu
| Klíč | Popis |
|---|---|
| a | Přejít do režimu vkládání a připojit |
| A | Přejít do režimu vkládání a připojit ke konci řádku |
| i | Přejít do režimu vkládání |
| I | Vložit před první neprázdný znak v řádku |
| v | Přejít do vizuálního režimu |
| V | Přejít do režimu vizuálního řádku |
| <c-v> | Přejít do režimu vizuálního blokování |
| gv | Znovu vybrat vizuální |
| o | Otevřít nový řádek pod |
| O | Otevřít nový řádek nad |
| J | Spojit řádky |
| c | Změnit |
| C | Změnit na konec řádku |
| cc | Změnit řádek |
| s | Nahradit znak |
| S | Nahradit řádek |
| dd | Smazat řádek |
| d | Smazat |
| D | Smazat do konce řádku |
| x | Smazat znak |
| X | Smazat znak zpětně |
| gu | Převést na malá písmena |
| guu | Převést řádek na malá písmena |
| gU | Převést na velká písmena |
| gUU | Převést řádek na velká písmena |
| y | Kopírovat |
| yy | Kopírovat řádek |
| Y | Kopírovat do konce řádku |
| p | Vložit |
| P | Vložit před |
| r. | Nahradit znak |
| R | Přejít do nahrazovacího režimu |
| : | Přepnout na příkazovou řádku |
| / | Hledat |
| u | Zpět |
| <c-r> | Znovu |
| U | Znovu |
| m. | Označit |
| >> | Odsadit řádek |
| << | Zrušit odsazení řádku |
| > | Odsadit řádky |
| < | Zrušit odsazení řádků |
| <c-f> | Posunout stránku dolů |
| <pagedown> | Posunout stránku dolů |
| <c-b> | Posunout stránku nahoru |
| <pageup> | Posunout stránku nahoru |
| <c-u> | Posunout stránku o polovinu nahoru |
| <c-d> | Posunout stránku o polovinu dolů |
| zz | Středový pohled na kurzor |
| ga | Vytisknout kód znaku |
| . | Zopakovat poslední změnu |
| == | Zarovnat řádek |
| = | Zarovnat řádky |
| ~ | Změnit velikost písmen |
| <c-a> | Přičíst k číslu |
| <c-x> | Odečíst od čísla |
| <c-o> | Přejít na předchozí odkaz |
| <c-i> | Přejít na další odkaz |
| <c-w>h | Přepnout na levý pohled |
| <c-w><c-h> | Přepnout na levý pohled |
| <c-w><left> | Přepnout na levý pohled |
| <c-w>j | Přepnout na dolní pohled |
| <c-w><c-j> | Přepnout na dolní pohled |
| <c-w><down> | Přepnout na dolní pohled |
| <c-w>k | Přepnout na horní pohled |
| <c-w><c-k> | Přepnout na horní pohled |
| <c-w><up> | Přepnout na horní pohled |
| <c-w>l | Přepnout na pravý pohled |
| <c-w><c-l> | Přepnout na pravý pohled |
| <c-w><right> | Přepnout na pravý pohled |
| <c-w>w | Přejít na další pohled |
| <c-w><c-w> | Přejít na další pohled |
| <c-w>s | Rozdělit vodorovně |
| <c-w>S | Rozdělit vodorovně |
| <c-w><c-s> | Rozdělit vodorovně |
| <c-w>v | Rozdělit svisle |
| <c-w><c-v> | Rozdělit svisle |
| gt | Přepnout na další kartu |
| gT | Přepnout na předchozí kartu |
| gqq | Formátovat řádek |
| gq | Formátovat řádky |
| q. / q | Spuštění/ukončení záznamu makra pomocí pojmenovaného registru makra. |
Podporované pohyby
| Klíč | Popis |
|---|---|
| h | Vlevo |
| <left> | Vlevo |
| <backspace> | Vlevo |
| j | Dolů |
| <down> | Dolů |
| <enter> | Dolů na první neprázdný |
| k | Nahoru |
| <up> | Nahoru |
| – | Nahoru na první neprázdný |
| l | Vpravo |
| <right> | Vpravo |
| <space> | Vpravo |
| $ | Na konec řádku |
| <end> | Na konec řádku |
| Do sloupce 0 | |
| <home> | Do sloupce 0 |
| ^ | Na první znak řádku |
| f. | Najít znak |
| F. | Najít znak zpětně |
| t. | Na znak |
| T. | Na znak zpětně |
| ; | Opakovat poslední příkaz till nebo find |
| , | Opakovat poslední příkaz till nebo find |
| n | Najít další |
| N | Najít předchozí |
| gg | Na první řádek |
| G | Na poslední řádek |
| w | Slovo vpřed |
| Z | SLOVO vpřed |
| b | Slovo vzad |
| B | SLOVO vzad |
| e | Na konec slova |
| V | Na konec SLOVA |
| ge | Na konec předchozího slova |
| gE | Na konec předchozího SLOVA |
| % | K odpovídající položce |
| `[a-zA-Z><] | K označení |
| '[a-zA-Z><] | K označenému řádku |
| [[ | Na začátek předchozího bloku závorek |
| ]] | Na začátek dalšího bloku závorek |
| [] | Na konec předchozího bloku závorek |
| ][ | Na konec dalšího bloku závorek |
| * | Na další výskyt slova pod kurzorem |
| # | Na předchozí výskyt slova pod kurzorem |
| H | Na první řádek okna |
| M | Na prostřední řádek okna |
| L | Na poslední řádek okna |
| gj | Na další vizuální řádek |
| gk | Na předchozí vizuální řádek |
Podporované textové objekty
| Klíč | Popis |
|---|---|
| iw | Vybrat slovo pod kurzorem |
| aw | Vybrat slovo pod kurzorem včetně okolních mezer |
| iW | Vybrat SLOVO pod kurzorem |
| aW | Vybrat SLOVO pod kurzorem včetně okolních mezer |
| i" | Vybrat text uvnitř uvozovek |
| a" | Vybrat text uvnitř uvozovek, včetně samotných uvozovek |
| i’ | Vybrat text uvnitř jednoduchých uvozovek |
| a’ | Vybrat text uvnitř jednoduchých uvozovek, včetně samotných uvozovek |
| i` | Vybrat text uvnitř zpětných lomítek |
| a` | Vybrat text uvnitř zpětných lomítek, včetně samotných lomítek |
| ib | Vybrat text uvnitř závorek |
| i) | Vybrat text uvnitř závorek |
| i( | Vybrat text uvnitř závorek |
| ab | Vybrat text uvnitř závorek, včetně samotných závorek |
| a) | Vybrat text uvnitř závorek, včetně samotných závorek |
| a( | Vybrat text uvnitř závorek, včetně samotných závorek |
| iB | Vybrat text uvnitř složených závorek |
| o} | Vybrat text uvnitř složených závorek |
| i{ | Vybrat text uvnitř složených závorek |
| aB | Vybrat text uvnitř složených závorek, včetně samotných závorek |
| a} | Vybrat text uvnitř složených závorek, včetně samotných závorek |
| a{ | Vybrat text uvnitř složených závorek, včetně samotných závorek |
| i< | Vybrat text uvnitř lomených závorek |
| i> | Vybrat text uvnitř lomených závorek |
| a< | Vybrat text uvnitř lomených závorek, včetně samotných závorek |
| a> | Vybrat text uvnitř lomených závorek, včetně samotných závorek |
| i[ | Vybrat text uvnitř hranatých závorek |
| I] | Vybrat text uvnitř hranatých závorek |
| a[ | Vybrat text uvnitř hranatých závorek, včetně samotných závorek |
| a] | Vybrat text uvnitř hranatých závorek, včetně samotných závorek |
| i, | Vybrat text mezi čárkami |
| a, | Vybrat text mezi čárkami, včetně samotných čárek |
Podporované příkazy v režimu vkládání
| Klíč | Popis |
|---|---|
| <c-d> | Zrušit odsazení |
| <c-t> | Odsadit |
| <c-e> | Vložit zespodu |
| <c-y> | Vložit shora |
| <c-w> | Odstranit slovo |
| <c-r>. | Vložit obsah registru |
| <c-o> | Přepnout na normální režim na jeden příkaz |
| <c-a> | Zvýšit číslo pod kurzorem |
| <c-x> | Snížit číslo pod kurzorem |
Textový objekt čárka
To je něco, co mi ve Vimu chybělo. Textový objekt čárka usnadňuje úpravy seznamů parametrů v jazycích podobných C a dalších seznamů oddělených čárkami. Jedná se v podstatě o oblast mezi dvěma čárkami nebo mezi čárkou a závorkou. V řádku zobrazeném na obrázku vpravo jsou červeně zvýrazněny tři oblasti, které tento textový objekt může pokrývat.

Rozsahy textových objektů oddělené čárkami. Pokud je kurzor například nad "arg2", stisknutím kláves c i ("změnit mezi čárkami") se vymaže "double arg2" a kurzor se v režimu vkládání umístí mezi obě čárky. Velmi pohodlný způsob, jak měnit parametry funkce.
Emulovaná příkazová lišta Vimu
Ve verzi Kate 4.11 byla zavedena skrytá volba nastavení, díky níž klávesy /, ? a : vyvolávají nové vyhledávání či příkaz namísto obvyklého panelu Najít / Nahradit / Příkazový řádek v programu Kate. Účelem této lišty je napodobit mnoho funkcí příkazové lišty editoru Vim a také vyřešit řadu problémů souvisejících s interakcí režimu Vim v Kate s lištou Najít/Nahradit (nefunkční interaktivní nahrazování; přírůstkové vyhledávání, které nesprávně umisťuje kurzor; nepoužitelnost v mapováních/makrech; atd.).
Emulovaná příkazová lišta nabízí následující klávesové zkratky; stejně jako ve Vimu je lze přemapovat pomocí příkazů cmap, cnoremap atd.:
| Klíč | Popis |
|---|---|
| <c-r>. | vložit obsah registru. |
| <c-r><c-w> | Vložte slovo pod kurzor (v dokumentu). |
| <c-p> | Spustit doplňování podle kontextu (viz níže) posunout se zpět/nahoru v seznamu návrhů. |
| <c-p> | Přejít vpřed/dolů v seznamu doplňovaných položek. |
| <c-space> | Rozšíření Kate Vim. Automatické doplňování slov z dokumentu. |
| <c-d> | Rozšíření Kate Vim. Ve výrazu pro nahrazení v příkazu sed (tj. s/find/replace/[g][c][i]) vymazat výraz "find" a umístit kurzor na toto místo. |
| <c-f> | Rozšíření Kate Vim. V výrazu pro nahrazení v příkazu sed (tj. s/find/replace/[g][c][i]) vymazat část "replace" a umístěte tam kurzor. |
| <c-g>. | Rozšíření Kate Vim. Stejně jako v případě . vložit obsah pojmenovaného registru, ale provést jeho únik tak, aby při použití ve vyhledávání bylo vyhledáváno doslovné znění obsahu registru; nikoli obsah registru interpretovaný jako regulární výraz. |
O "doplňování podle kontextu" se rozhoduje následovně:
- V liště vyhledávání (
/nebo?) se nabízí automatické doplňování z historie vyhledávání (včetně vyhledávání zahájených pomocí znaků*a#, vyhledávání provedených v sed-replace výrazech atd.) - V prázdném příkazovém řádku (
:) lze využít automatické doplňování z historie příkazů (pozn.: automatické doplňování názvů příkazů se spustí automaticky, jakmile začnete psát). - Pokud se v příkazovém řádku nachází výraz pro nahrazení pomocí sed (např.
:s/find/replace/gc) a kurzor je umístěn nad slovem "find", provede se automatické doplňování z historie "vyhledávání"; pokud je kurzor nad slovem "replace", provede se automatické doplňování z historie výrazů pro "nahrazení".
Při zadání výrazu pro nahrazení pomocí sed v příkazovém řádku s příznakem "c" (např. s/find/replace/gc) se spustí interaktivní vyhledávání a nahrazování ve stylu Vimu.
Několik příkladů použití emulovaného příkazového řádku, doplněných o GIF animace, najdete v tomto blogu. Ve verzi 4.11 lze emulovaný příkazový řádek zapnout nastavením skryté možnosti nastavení "Vi Input Mode Emulate Command Bar" na hodnotu true ve vašem souboru katerc/kwriterc/kdeveloprc.
Chybějící funkce
Jak již bylo zmíněno, cílem režimu VI v editoru Kate není podporovat 100 % funkcí editoru Vim, nicméně některé funkce zde velmi chybí
- Režim vizuálního bloku – zejména možnost vkládat text na začátek nebo na konec vybraného vizuálního bloku.
- Možnost používat příkazy ex i v jiných programech než v aplikaci Kate.
- Vyhledávací kód je třeba vylepšit a příkazy * a # by měly fungovat jako běžné vyhledávání.
Pokud vám chybí nějaké další funkce nebo chcete přispět k vylepšení těch výše zmíněných, neváhejte nás kontaktovat nebo poslat opravy! :-)
Seznam změn
- 16. 5. 2010:
První verze. Shromáždili jsme informace z blogových příspěvků a souborů README, abychom vytvořili jediný zdroj aktuálních informací. - 17. 5. 2010:
Přidány klávesové zkratkyCtrl+AaCtrl+X(zvýšení/snížení čísla pod kurzorem). - 30. 8. 2010:
Stránka byla přesunuta na kate-editor.org. - 10. září 2010:
Opraven text v textovém objektu čárka a provedeny některé opravy formátování - 3. února 2021:
Tabulky klávesových zkratek byly převedeny do formátu Markdown pro Hugo.