Erlend
Hamberg
ehamberg@gmail.com
&Freek.de.Kruijf;

# De VI-invoermethode

## VI-invoermethode

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

Het doel van de VI-modus integreert netjes met de programma's en wijkt af van het gedrag van Vim als dat zinvol is. Bijvoorbeeld ``:w`` zal een dialoog voor opslaan openen in de VI-modus van &kate;.

Om de VI-invoermodus voor alle nieuwe weergaven in te schakelen, gaat u naar Instellingen&kate; instellen... Bewerken VI-invoermodus. Op dit tabblad kunt u opties instellen voor de VI-invoermodus en de toetsenmapping definiëren en bewerken in deze modus. VI-invoermodus kan ook omgeschakeld worden met de instelling VI-invoermodus in het menu Bewerken. (De standaard sneltoets is Meta&Ctrl;V - waar Meta gewoonlijk de toets Windows is).

### 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 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.

  The reason for having U act as redo in &kate;’s VI mode is that the shortcut &Ctrl;R by default is taken by &kate;’s replace function (search and replace). By default, the VI mode won’t override &kate;’s shortcuts (this can be configured in Settings Configure &kate;... Editing Vi Input Mode), therefore a redo-action needs to be available as a regular key press, too. Besides, the behavior of the U command in Vim does not map well to &kate;’s internal undo system, so it would be non-trivial to support anyway.

- &kate;: ``print`` toont de dialoog Afdrukken.

  Vim: ``print`` prints the lines of the given range like its grandfather ed.

  Commands like ``:print`` are available not only in the VI mode but for users using regular &kate;, too - therefore the ``:print`` command opens the print dialog - following the principle of least surprise instead of mimicking Vim’s behavior.

- &kate;: Y yanks tot het einde van de regel.

  Vim: Y yanks de gehele regel, net als y y.

  VI’s behavior for the Y command is in practice a bug. For both change and delete commands, c c/ d d will do its action on the current line and C/D will work from the cursor column to the end of the line. However, both y y and Y yanks the current line. In &kate;’s VI Mode Y will yank to the end of the line. This is described as more logical in the Vim documentation.

- &kate;: O en o opent [aantal] nieuwe regels en plaatst u in invoegmodus.

  Vim: O en o opent een nieuwe regel en voegt een [aantal] keren tekst in bij het verlaten van de invoegmodus.

  This is mostly done as a consequence of witnessing many people being confused by this behavior on a vim irc channel (#vim on freenode).

### Modi omschakelen

- Normale modus stelt u in staat om commando's in te voeren om te navigeren of een document te bewerken en is de standaard modus. U kunt er naar terug keren vanuit elke andere modus door &Esc; in te drukken.

- Visual Mode permits you to highlight text in a document. Most Normal Mode commands are also valid in this mode. You can enter it by pressing v to select characters or V to select lines.

- Invoegmodus stelt u in staat om het document direct te bewerken. U kunt in deze modus komen door i in te drukken of één van de verschillende andere onderstaande commando's.

- Command Mode permits you to run certain commands. Press :, enter the command, and press &Enter;.

### Supported normal/visual mode commands

a | Enter Insert Mode; append after cursor
A | Enter Insert Mode; append after line
i | Enter Insert Mode; insert before cursor
v | Enter Visual Mode; select characters
V | Enter Visual Mode; select lines
o | Open a new line below current line
O | Open a new line above current line
J | Regels samenvoegen
c | Change: follow by a motion to delete and enter Insert mode
C | Change to end of line: Delete to end of line and enter Insert Mode
c c | Change line: Delete line and enter Insert Mode
s | Substitute character
S | Substitute line
d d | Regel verwijderen
d | Follow by a motion to delete
D | Delete to end of line
x | Delete character to right of cursor
X | Delete character to left of cursor
g u | Follow with a motion to make lowercase
g u u | Make the current line lowercase
g U | Follow with a motion to make uppercase
g U U | Make the current line uppercase
y | Follow by a motion to yank (copy)
y y | Yank (copy) line
Y | Yank (copy) line
p | Paste after cursor
P | Paste before cursor
r | Follow with a character to replace the character after the cursor
: | Enter Command Mode
/ | Zoeken
u | Ongedaan maken
&Ctrl;r | Opnieuw
U | Opnieuw
m | Set mark (can be used by motions later)
n | Volgende zoeken
N | Vorige zoeken
>> | Indent line
<< | Unindent line
> | Indent lines
< | Unindent lines
&Ctrl;f | Pagina omlaag
&Ctrl;b | Pagina omhoog
g a | Print the ASCII value of the character
. | Repeat last change
== | commandAlignLine
= | commandAlignLines
~ | Change case of current character

### Supported motions

These may be used to move around a document in Normal or Visual mode, or in conjunction with one of the above commands. They may be preceded by a count, which indicates how many of the appropriate movements to make.

h | Left
Left | Left
&Backspace; | Left
j | Omlaag
Omlaag | Omlaag
k | Up
Omhoog | Up
l | Rechts
Rechts | Rechts
Spatie | Rechts
$ | Einde van regel
End | Einde van regel
0 | First character of line (Column 0)
Home | First character of line
^ | First non-blank character of line
f | Follow by character to move to right of cursor
F | Follow by character to move to left of cursor
t | Follow by character to move to right of cursor, placing the cursor on character before it
T | Follow by character to move to left of cursor, placing the cursor on character before it
g g | Eerste regel
G | Last line
w | Next Word
W | Next word separated by whitespace
b | Previous word
B | Previous word separated by whitespace
e | End of word
E | End of word separated by whitespace
g e | End of previous word
g E | End of previous word separated by whitespace
| | Follow by a column number to move to that column
% | Follow by an item to move to that item
` | Markeren
‘ | First non-whitespace character of the line the mark is on
[[ | Previous opening bracket
]] | Next opening bracket
[] | Previous closing bracket
][ | Volgende sluithaak

### Ondersteunde tekstobjecten

Deze kunnen gebruikt worden om een bepaald gedeelte van een document te selecteren.

i w | Inner word: word including whitespace
a w | A word: word excluding whitespace
i" | Previous double-quote (`"`) to next double-quote, including quotation marks
a” | Previous double-quote (`"`) to next double-quote, excluding quotation marks
i' | Previous single-quote (`'`) to next single-quote, including quotation marks
a' | Previous single-quote (`'`) to next single-quote, excluding quotation marks
i( | Previous opening parenthesis [`(`] to next closing parenthesis [`)`], including the parenthesis
a( | Previous opening parenthesis [`(`] to next closing parenthesis [`)`], excluding the parenthesis
i[ | Previous opening square bracket (`[`) to next closing square bracket (`]`), including the brackets
a[ | Previous opening square bracket (`[`) to next closing square bracket (`]`), excluding the brackets

### Supported insert mode commands

&Ctrl;d | Inspringen verwijderen
&Ctrl;t | Inspringen
&Ctrl;e | commandInsertFromBelow
&Ctrl;y | Woord verwijderen
&Ctrl;w | Woord verwijderen
&Ctrl;Home | Move to first character in the document

### Het kommatekstobject

Dit object ontbreekt in Vim. Het kommatekstobject maakt het gemakkelijk om parameterlijsten in C-achtige talen en andere kommagescheidenlijsten. Het is in de basis het gebied tussen twee komma's of tussen een komma en een haakje. In de in de illustratie getoonde regel rechts lichten de drie bereiken, die deze tekstobjecten kunnen overspannen, in rood op.

Een voorbeeld van een kommatekstobject
Een voorbeeld van een kommatekstobject

Comma text object ranges. If the cursor is over &eg; arg2, pressing c i, (change inner comma) would delete double arg2 and place the cursor between the two commas in insert mode. A very convenient way to change a function's parameters.

### Ontbrekende functies

As stated earlier, the goal of &kate;’s VI Mode is not to support 100% of Vim’s features, however, there are some features which are sorely missed:

- Visual block mode - especially the ability to prepend/append text to the visual block selection.

- Having ex commands available in other programs than the &kate; application.

- The search code needs improvement and the * and # commands should just be regular searches.