VI-modus
Inleiding
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.
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
- De tekstbewerker Kate
- KWrite – de eenvoudig tekstbewerker van KDE
- KDevelop – een geavanceerde IDE voor vele programmeertalen
- 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.
- Kate:
U
enCtrl+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 omU
te laten werken in de VI-modus van Kate als opnieuw doen is dat de sneltoetsCtrl+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. - 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. - Kate:
Y
kopieert tot het eind van de regel.
Vim:Y
kopieert de gehele regel, net alsyy
. Het gedrag van VI voor het commandoY
is in de praktijk een bug; Voor beide commando's wijzigen en verwijderen,cc
/dd
zullen hun actie doen op de huidige regel enC
/D
zullen werken vanaf de cursorkolom tot het eind van de regel. Echter, beidenyy
enY
kopieert de huidige regel. In de VI modus van Kate zalY
tot het eind van de regel kopiëren. Dit wordt beschreven als "logischer" in de Vim documentatie. - 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
Sleutel | Beschrijving |
---|---|
a | Ga naar invoermodus en voeg achter |
A | Ga naar invoermodus en voeg achter na einde regel |
i | Ga naar invoermodus ter plekke |
I | Ga naar invoermodus en voer in voor het eerste niet-blanco teken op de regel |
v | Ga naar zichtmodus |
V | Ga naar regelzichtmodus |
<c-v> | Ga naar blokzichtmodus |
GV | Selecteer opnieuw zicht |
o | Open nieuwe regel onder |
o | Open nieuwe regel boven |
J | Regels samenvoegen |
c | Wijzigen |
C | Wijzigen tot EOL |
cc | Regel wijzigen |
s | Teken vervangen |
S | Regel vervangen |
dd | Regel verwijderen |
d | Verwijderen |
D | Tot EOL verwijderen |
x | Teken verwijderen |
X | Teken achterwaarts verwijderen |
gu | Maak kleine letters |
guu | Maak regel kleine letters |
gU | Maak hoofdletter |
gUU | Maak regel hoofdletters |
y | Yank (kopieer) |
yy | Yank (kopieer) regel |
Y | Tot EOL kopiëren |
p | Plakken |
P | Plakken voor |
R | Vervang teken |
R | Ga naar vervanging modus |
: | Overschakelen naar commandoregel |
/ | Zoeken |
u | Ongedaan maken |
<c-r> | Opnieuw |
U | Opnieuw |
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 |
zz | Centreer beeld rond cursor |
ga | Toon 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>h | Omschakelen naar linker weergave |
<c-w><c-h> | Omschakelen naar linker weergave |
<c-w><left> | Omschakelen naar linker weergave |
<c-w>j | Omschakelen naar omlaagweergave |
<c-w><c-j> | Omschakelen naar omlaagweergave |
<c-w><down> | Omschakelen naar omlaagweergave |
<c-w>k | Omschakelen naar omhoogweergave |
<c-w><c-k> | Omschakelen naar omhoogweergave |
<c-w><up> | Omschakelen naar omhoogweergave |
<c-w>l | Omschakelen naar rechtsweergave |
<c-w><c-l> | Omschakelen naar rechtsweergave |
<c-w><right> | Omschakelen naar rechtsweergave |
<c-w>w | Omschakelen naar volgende weergave |
<c-w><c-w> | Omschakelen naar volgende weergave |
<c-w>s | Horizontaal splitsen |
<c-w>S | Horizontaal splitsen |
<c-w><c-s> | Horizontaal splitsen |
<c-w>v | Verticaal splitsen |
<c-w><c-v> | Verticaal splitsen |
gt | Omschakelen naar volgende tabblad |
gT | Omschakelen naar vorige tabblad |
gqq | Formaatregel |
gq | Formaatregels |
q. / q | Begin/ eindig opnemen macro met het noemde macro register. |
Ondersteunde verplaatsingen
Sleutel | Beschrijving |
---|---|
u | Links |
<left> | Links |
<backspace> | Links |
j | Omlaag |
<down> | Omlaag |
<enter> | Omlaag naar eerste niet blanco |
k | Omhoog |
<up> | Omhoog |
– | Omhoog naar eerste niet blanco |
l | Rechts |
<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 |
n | Volgende zoeken |
N | Zoek vorige |
gg | Naar eerste regel |
G | Naar laatste regel |
w | Woord voorwaarts |
W | WOORD voorwaarts |
b | Woord achterwaarts |
B | WOORD achterwaarts |
e | Naar einde van woord |
E | Naar einde van WOORD |
ge | Naar einde van vorige woord |
gE | Naar 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 |
H | Naar eerste regel van venster |
M | Naar middelste regel van venster |
L | Naar laatste regel van venster |
gj | To volgende zichtbare regel |
gk | Naar vorige visuele regel |
Ondersteunde tekstobjecten
Sleutel | Beschrijving |
---|---|
iw | Binnenste woord |
aw | Een woord |
iW | Binnenste WOORD |
aW | Een WOORD |
i" | Binnenste aanhalingsteken |
a" | Een aanhalingsteken |
i' | Binnenste accentteken |
a' | Een enkel accentteken |
i` | Binnenste achterover liggend accentteken |
a` | Een achterover liggend accentteken |
ib | Binnenste paren |
i) | Binnenste paren |
i( | Binnenste paren |
ab | A paren |
a) | A paren |
a( | A paren |
iB | Binnenste kromme haken |
o} | Binnenste kromme haken |
i{ | Binnenste kromme haken |
aB | Een 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
Sleutel | Beschrijving |
---|---|
<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.
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.:
Sleutel | Beschrijving |
---|---|
<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
enCtrl+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.