Spring naar inhoud

VI-modus


Inleiding

Vim Logo

De VI modus is een project van Kate om deze Vim-achtig te maken, modale bewerking naar de Kate tekstbewerker en door uitbreiding om andere KDE programma's die dezelfde componenten voor bewerking delen. Het project begon als een Google Summer of Code project in 2008 – waar alle basisfunctionaliteit was geschreven. Ik ben doorgegaan om deze code te onderhouden en verdere ontwikkeling en het aantal ontbrekende functies uit Vim zijn langzaam aan het verminderen. De meeste Vim gebruikers zullen al productief zijn in de VI modus van Kate. Een lijst met wat ontbreekt is te vinden onderaan de pagina.

Deze pagina is bedoeld om een bijgewerkt overzicht te zijn van dit werk.

Om de VI invoermodus in te schakelen, ga naar
Instellingen → Kate configureren… → Bewerken → VI Invoermodus.
Het kan ook omgeschakeld worden met de "VI Invoermodus" instelling in het menu "Bewerken". (De standaard sneltoets is Meta+Ctrl+V – waar Meta gewoonlijk de toets Windows is).

Doelstellingen

Het doel van de VI-modus is niet om een volledige vervanging voor Vim te zijn en alle functies van Vim te ondersteunen. Het doel is om het op de "Vim manier" van tekstbewerken te doen - en de geleerde Vim-gewoonten - beschikbaar te maken voor programma's die de tekstbewerker als hun interne editor gebruiken. Deze programma's omvatten

  1. De tekstbewerker Kate
  2. KWrite – de eenvoudig tekstbewerker van KDE
  3. KDevelop – een geavanceerde IDE voor vele programmeertalen
  4. Kile – Een LaTeX bewerker

De VI-modus richt zich op nette integratie met de programma's en wijkt af van het gedrag van Vim waar dat zinvol is. Bijvoorbeeld, :w zal een opslagdialoog in de VI-modus van Kate openen.

Incompatibiliteiten met Vim

Er zijn slechts een paar functies van de VI-modus van Kate die incompatibel zijn met Vim (dingen die ontbreken niet meegenomen). Zij worden hieronder getoond samen met de respectievelijke redenen.

  1. Kate: U en Ctrl+r is opnieuw doen
    Vim: Ctrl+r is normaal opnieuw doen, U wordt gebruikt om alle laatste wijzigingen op één regel ongedaan te maken
    De reden om U te laten werken in de VI-modus van Kate als opnieuw doen is dat de sneltoets Ctrl+r standaard door Kate wordt gebruikt als functie voor vervangen (zoeken en vervangen). Standaard zal de VI-modus de sneltoetsen van Kate niet overschrijven (dit kan geconfigureerd worden in Instellingen → Kate configureren… → Bewerken → Vi invoermodus), daarom is een actie opnieuw doen nodig om ook beschikbaar te zijn als een “reguliere” toetsaanslag. Daarnaast, het gedrag van het commando U in Vim klopt niet zo goed met het interne systeem van Kate voor ongedaan maken, dus zou het niet triviaal zijn om het toch te ondersteunen.
  2. Kate: :print toont de "print" dialoog
    Vim: :print print de regels van de gegeven reeks zoals zijn grootvader ed. Commando's zoals :print zijn beschikbaar niet alleen in de VI-modus maar ook voor gebruikers die het “reguliere” Kate – ik heb daarom gekozen om het commando :print de afdrukdialoog te laten openen – het principe volgend van minste verrassing in plaats van nadoen van het gedrag van Vim.
  3. Kate: Y kopieert tot het eind van de regel.
    Vim: Y kopieert de gehele regel, net als yy. Het gedrag van VI voor het commando Y is in de praktijk een bug; Voor beide commando's wijzigen en verwijderen, cc/dd zullen hun actie doen op de huidige regel en C/D zullen werken vanaf de cursorkolom tot het eind van de regel. Echter, beiden yy en Y kopieert de huidige regel. In de VI modus van Kate zal Y tot het eind van de regel kopiëren. Dit wordt beschreven als "logischer" in de Vim documentatie.
  4. Kate: :map wijzigt de geselecteerde regels van het document met de geleverde JavaScript expressie.
    Vim: :map voegt de geleverde mapping naar Normaal en Visual modi. Het commando "map" was al gereserveerd door Kate; in 4.12+, u kunt een combinatie van :nmap en :vmap gebruiken om het te vervangen.

Ondersteunde commando's

Ondersteunde commando's in normale/visuele modus

SleutelBeschrijving
aGa naar invoermodus en voeg achter
AGa naar invoermodus en voeg achter na einde regel
iGa naar invoermodus ter plekke
IGa naar invoermodus en voer in voor het eerste niet-blanco teken op de regel
vGa naar zichtmodus
VGa naar regelzichtmodus
<c-v>Ga naar blokzichtmodus
GVSelecteer opnieuw zicht
oOpen nieuwe regel onder
oOpen nieuwe regel boven
JRegels samenvoegen
cWijzigen
CWijzigen tot EOL
ccRegel wijzigen
sTeken vervangen
SRegel vervangen
ddRegel verwijderen
dVerwijderen
DTot EOL verwijderen
xTeken verwijderen
XTeken achterwaarts verwijderen
guMaak kleine letters
guuMaak regel kleine letters
gUMaak hoofdletter
gUUMaak regel hoofdletters
yYank (kopieer)
yyYank (kopieer) regel
YTot EOL kopiëren
pPlakken
PPlakken voor
RVervang teken
RGa naar vervanging modus
:Overschakelen naar commandoregel
/Zoeken
uOngedaan maken
<c-r>Opnieuw
UOpnieuw
m.Zet markering
>>Spring regel in
<<Inspringen verwijderen
>Regels in laten springen
<Inspringen verwijderen
<c-f>Pagina omlaag schuiven
<pagedown>Pagina omlaag schuiven
<c-b>Omhoog schuiven
<pageup>Omhoog schuiven
<c-u>Schuif halve pagina omhoog
<c-d>Schuif halve pagina omlaag
zzCentreer beeld rond cursor
gaToon teken code
.Laatste wijziging herhalen
==Regel uitlijnen
=Regels uitlijnen
~Hoofd-/kleine letters wijzigen
<c-a>Aan nummer toevoegen
<c-x>Van nummer aftrekken
<c-o>Ga naar vorige sprong
<c-i>Ga naar volgende sprong
<c-w>hOmschakelen naar linker weergave
<c-w><c-h>Omschakelen naar linker weergave
<c-w><left>Omschakelen naar linker weergave
<c-w>jOmschakelen naar omlaagweergave
<c-w><c-j>Omschakelen naar omlaagweergave
<c-w><down>Omschakelen naar omlaagweergave
<c-w>kOmschakelen naar omhoogweergave
<c-w><c-k>Omschakelen naar omhoogweergave
<c-w><up>Omschakelen naar omhoogweergave
<c-w>lOmschakelen naar rechtsweergave
<c-w><c-l>Omschakelen naar rechtsweergave
<c-w><right>Omschakelen naar rechtsweergave
<c-w>wOmschakelen naar volgende weergave
<c-w><c-w>Omschakelen naar volgende weergave
<c-w>sHorizontaal splitsen
<c-w>SHorizontaal splitsen
<c-w><c-s>Horizontaal splitsen
<c-w>vVerticaal splitsen
<c-w><c-v>Verticaal splitsen
gtOmschakelen naar volgende tabblad
gTOmschakelen naar vorige tabblad
gqqFormaatregel
gqFormaatregels
q. / qBegin/ eindig opnemen macro met het noemde macro register.

Ondersteunde verplaatsingen

SleutelBeschrijving
uLinks
<left>Links
<backspace>Links
jOmlaag
<down>Omlaag
<enter>Omlaag naar eerste niet blanco
kOmhoog
<up>Omhoog
Omhoog naar eerste niet blanco
lRechts
<right>Rechts
<space>Rechts
$Tot EOL
<end>Tot EOL
Tot 0 kolom
<home>Tot 0 kolom
^Naar het eerste teken op de regel
f.Zoek teken
F.Teken achterwaarts zoeken
t.Naar teken
T.Naar teken achterwaarts
;Laatste t. of f. commando herhalen
,Laatste t. of f. commando herhalen
nVolgende zoeken
NZoek vorige
ggNaar eerste regel
GNaar laatste regel
wWoord voorwaarts
WWOORD voorwaarts
bWoord achterwaarts
BWOORD achterwaarts
eNaar einde van woord
ENaar einde van WOORD
geNaar einde van vorige woord
gENaar einde van vorige WOORD
%Naar overeenkomend item
`[a-zA-Z><]Naar markering
'[a-zA-Z><]Naar gemarkeerde regel
[[Naar vorig begin van accolade block
]]Naar volgend begin van accolade block
[]Naar vorig einde van accolade block
][Naar volgend einde van accolade block
*Naar volgend voorkomen van woord onder cursor
#Naar vorig voorkomen van woord onder cursor
HNaar eerste regel van venster
MNaar middelste regel van venster
LNaar laatste regel van venster
gjTo volgende zichtbare regel
gkNaar vorige visuele regel

Ondersteunde tekstobjecten

SleutelBeschrijving
iwBinnenste woord
awEen woord
iWBinnenste WOORD
aWEen WOORD
i"Binnenste aanhalingsteken
a"Een aanhalingsteken
i'Binnenste accentteken
a'Een enkel accentteken
i`Binnenste achterover liggend accentteken
a`Een achterover liggend accentteken
ibBinnenste paren
i)Binnenste paren
i(Binnenste paren
abA paren
a)A paren
a(A paren
iBBinnenste kromme haken
o}Binnenste kromme haken
i{Binnenste kromme haken
aBEen kromme haak
a}Een kromme haak
a{Een kromme haak
i<Binnenste ongelijkheidsteken
i>Binnenste ongelijkheidsteken
a<Ongelijkheidsteken
a>Ongelijkheidsteken
i[Binnenste kromme haak
I]Binnenste kromme haak
a[Een rechte haak
a]Een rechte haak
i,Binnenste komma
a,Een komma

Ondersteunde commando's in invoegmodus

SleutelBeschrijving
<c-d>&Inspringen verwijderen
<c-t>Inspringen
<c-e>Van onderaf invoegen
<c-y>Van boven invoegen
<c-w>Woord verwijderen
<c-r>.Inhoud van register invoegen
<c-o>Naar normale modus voor één commando omschakelen
<c-a>Nummer onder cursor verhogen
<c-x>Nummer onder cursor verlagen

Het kommatekstobject

Dit is iets dat ik in Vim heb gemist. Het _komma_tekstobject maakt het gemakkelijk om parameterlijsten in C-achtige talen en andere _komma_gescheiden lijsten te wijzigen. Het is in de basis het gebied tussen twee komma's of tussen een komma en een haakje. In de in de illustratie, rechts, getoonde regel lichten de drie bereiken, die deze tekstobjecten kunnen overspannen, in rood op.

comma to

Reeksen van kommatekstobjecten. Als de cursor boven, zeg, “arg2” is drukken op c i , (inwendige komma wijzigen) dan zou “double arg2” worden verwijderd en komt de cursor tussen de twee komma's in invoegmodus te staan. Een erg gemakkelijke manier om functieparameters te wijzigen.

Geëmuleerde commandobalk van vim

Kate 4.11 introduceert een verborgen optie voor configureren die er voor zorgt dat /, ? en : dat er een nieuwe zoek/ opdracht verschijnt in plaats van de gebruikelijke Zoek / Vervang / Opdrachtregelbalk verschijnt. De balk is bedoeld om veel van de functies van de opdrachtbalk van Vim te repliceren en ook veel van de problemen te repareren met de interactie van de Vim-modus van Kate met Zoek/vervangbalk van Kate (interactief vervangen werkt niet; incrementeel zoeken die de cursor niet juist positioneert; onbruikbaar in toewijzingen/macro's; etc.).

De volgende sneltoetsen worden geleverd door de geëmuleerde opdrachtbalk; zoals met Vim, deze kunnen opnieuw toegewezen worden met cmap, cnoremap, etc.:

SleutelBeschrijving
<c-r>.inhoud van register invoegen.
<c-r><c-w>Woord invoegen onder de (document)cursor.
<c-p>Roep context-specifieke aanvulling aan (zie onderstaand)
ga terug/ omhoog in de lijst met aanvullingen.
<c-p>Ga voorwaarts/ omlaag in de lijst met voltooiingen.
<c-space>Kate Vim uitbreiding.
Automatisch woord aanvullen uit document.
<c-d>Kate Vim uitbreiding.
In een sed-vervanguitdrukking (bijv. s/zoek/vervang/[g][c][i]),
wis de term “vervang” en plaats de cursor daar.
<c-f>Kate Vim uitbreiding.
In a sed-vervanguitdrukking (bijv. s/zoek/vervang/[g][c][i]),
wis de term “vervang” en plaats de cursor daar.
<c-g>.Kate Vim uitbreiding.
Zoals met ., voeg de inhoud van het genoemde register in,
maar escape het op zo'n manier dat wanneer gebruikt met een zoekopdracht,
we zoeken naar de letterlijke inhoud van het register;
niet de inhoud van het register geïnterpreteerd als een reguliere expressie.

De "context-specifieke aanvulling" wordt als volgt besloten:

  • In een zoekbalk (/ of ?), automatisch aanvullen vanuit de zoekgeschiedenis (wat omvat zoeken geïnitieerd via *; en #; zoekopdrachten gedaan in sed-vervanguitdrukkingen; etc.)
  • In een lege opdrachtbalk (:), automatisch aanvullen vanuit de geschiedenis van opdrachten (NB: automatisch aanvullen van opdrachtnamen wordt automatisch opgestart wanneer u begint met typen).
  • In een opdrachtbalk die een sed vervanguitdrukking bevat (bijv. :s/zoek/vervang/gc), als de cursor gepositioneerd is boven "zoek", automatisch aanvullen vanuit de "zoek" geschiedenis; indien boven het "vervang", automatisch aanvullen vanuit de geschiedenis van de "vervang" termen.

Bij uitvoeren van een sed-vervangexpressie in de opdrachtbalk met de "c" vlag (bijvoorbeeld. s/find/replace/gc), een Vim-stijl interactieve expressie voor zoeken/vervangen zal geïnitieerd worden.

Enige voorbeelden van gebruik van de geëmuleerde opdrachtbalk, met GIF animaties zijn gegeven in deze blog. In 4.11 kan de geëmuleerde opdrachtbalk ingeschakeld worden door het instellen van de verborgen configuratie optie "Vi invoermodus emuleer opdrachtbalk" op true in uw katerc/kwriterc/kdeveloprc.

Ontbrekende functies

Zoals eerder aangegeven, is het doel van de VI-modus niet om 100% van de functies van Vim te ondersteunen, er zijn echter functies die node missen

  • Visuele blokmodus – speciaal de mogelijkheid om tekst voor of achter te voegen aan de visuele selectie van een blok.
  • Ex opdrachten beschikbaar hebben in andere programma's dan de toepassing Kate.
  • De zoekcode heeft verbeteringen nodig en de commando's * en # zouden gewoon reguliere zoekopdrachten moeten zijn.

Als u andere functies mist of hulp wilt over dat wat bovenstaand is genoemd, voel u vrij om contact met me op te nemen of stuur patches! :-)

Log wijzigen

  • 2010-05-16:
    Initiële versie. Verzamelde de informatie uit blogitems en README-bestanden om een enkele bron te maken van de huidige informatie.
  • 2010-05-17:
    Ctrl+A en Ctrl+X toegevoegd (verhoogt/verlaagt nummer onder cursor).
  • 2010-08-30:
    pagina verplaatst naar kate-editor.org.
  • 2010-09-10:
    de tekst gerepareerd op het komma-tekst-object en reparaties gemaakt aan enige formattering
  • 2021-02-03:
    geconverteerde key-binding tabellen aan markdown voor hugo.