Přejít na obsah

Režim VI

Úvod

Vim Logo

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.

Chcete-li zapnout režim zadávání VI, přejděte na
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ří

  1. Textový editor Kate
  2. KWrite – jednoduchý textový editor pro KDE
  3. KDevelop – Pokročilé integrované vývojové prostředí (IDE) pro řadu programovacích jazyků
  4. 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.

  1. Kate: Klávesy U a Ctrl+r slouží k opakování akce
    Vim: Klávesová zkratka Ctrl+r slouží k normálnímu opakování akce, klávesa U se používá k vrácení všech posledních změn v jednom řádku
    Důvodem, proč klávesa U v režimu VI v Kate funguje jako opakování akce, je to, že klávesová zkratka Ctrl+r je 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říkazu U ve 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á.
  2. Kate: Příkaz :print zobrazí dialogové okno "Tisk"
    Vim: :print vytiskne řá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 :print otevře dialogové okno pro tisk – v souladu s principem "nejmenšího překvapení" namísto napodobování chování Vimu.
  3. Kate: Y zkopíruje text až na konec řádku.
    Vim: Y zkopíruje celý řádek, stejně jako yy. Chování příkazu Y ve VI je v praxi chybou. U příkazů pro změnu i mazání provede cc/dd akci na aktuálním řádku a C/D bude fungovat od sloupce kurzoru až do konce řádku. Nicméně jak yy, tak Y zkopírují aktuální řádek. V režimu VI v Kate zkopíruje Y text až do konce řádku. To je v dokumentaci k Vimu popsáno jako "logičtější".
  4. Kate: :map upraví vybrané řádky dokumentu pomocí zadaného výrazu v JavaScriptu.
    Vim: :map př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ů :nmap a :vmap.

Podporované příkazy

Podporované příkazy v normálním/vizuálním režimu

KlíčPopis
aPřejít do režimu vkládání a připojit
APřejít do režimu vkládání a připojit ke konci řádku
iPřejít do režimu vkládání
IVložit před první neprázdný znak v řádku
vPřejít do vizuálního režimu
VPřejít do režimu vizuálního řádku
<c-v>Přejít do režimu vizuálního blokování
gvZnovu vybrat vizuální
oOtevřít nový řádek pod
OOtevřít nový řádek nad
JSpojit řádky
cZměnit
CZměnit na konec řádku
ccZměnit řádek
sNahradit znak
SNahradit řádek
ddSmazat řádek
dSmazat
DSmazat do konce řádku
xSmazat znak
XSmazat znak zpětně
guPřevést na malá písmena
guuPřevést řádek na malá písmena
gUPřevést na velká písmena
gUUPřevést řádek na velká písmena
yKopírovat
yyKopírovat řádek
YKopírovat do konce řádku
pVložit
PVložit před
r.Nahradit znak
RPřejít do nahrazovacího režimu
:Přepnout na příkazovou řádku
/Hledat
uZpět
<c-r>Znovu
UZnovu
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ů
zzStředový pohled na kurzor
gaVytisknout 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>hPřepnout na levý pohled
<c-w><c-h>Přepnout na levý pohled
<c-w><left>Přepnout na levý pohled
<c-w>jPřepnout na dolní pohled
<c-w><c-j>Přepnout na dolní pohled
<c-w><down>Přepnout na dolní pohled
<c-w>kPřepnout na horní pohled
<c-w><c-k>Přepnout na horní pohled
<c-w><up>Přepnout na horní pohled
<c-w>lPřepnout na pravý pohled
<c-w><c-l>Přepnout na pravý pohled
<c-w><right>Přepnout na pravý pohled
<c-w>wPřejít na další pohled
<c-w><c-w>Přejít na další pohled
<c-w>sRozdělit vodorovně
<c-w>SRozdělit vodorovně
<c-w><c-s>Rozdělit vodorovně
<c-w>vRozdělit svisle
<c-w><c-v>Rozdělit svisle
gtPřepnout na další kartu
gTPřepnout na předchozí kartu
gqqFormátovat řádek
gqFormátovat řádky
q. / qSpuštění/ukončení záznamu makra pomocí pojmenovaného registru makra.

Podporované pohyby

KlíčPopis
hVlevo
<left>Vlevo
<backspace>Vlevo
jDolů
<down>Dolů
<enter>Dolů na první neprázdný
kNahoru
<up>Nahoru
Nahoru na první neprázdný
lVpravo
<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
nNajít další
NNajít předchozí
ggNa první řádek
GNa poslední řádek
wSlovo vpřed
ZSLOVO vpřed
bSlovo vzad
BSLOVO vzad
eNa konec slova
VNa konec SLOVA
geNa konec předchozího slova
gENa 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
HNa první řádek okna
MNa prostřední řádek okna
LNa poslední řádek okna
gjNa další vizuální řádek
gkNa předchozí vizuální řádek

Podporované textové objekty

KlíčPopis
iwVybrat slovo pod kurzorem
awVybrat slovo pod kurzorem včetně okolních mezer
iWVybrat SLOVO pod kurzorem
aWVybrat 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
ibVybrat text uvnitř závorek
i)Vybrat text uvnitř závorek
i(Vybrat text uvnitř závorek
abVybrat 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
iBVybrat 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
aBVybrat 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.

comma to

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é zkratky Ctrl+A a Ctrl+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.