# Der VI-Eingabemodus

## VI-Eingabemodus

Ziel des VI-Modus ist nicht, Vim zu ersetzen indem alle Vim-Funktionen unterstützt werden. Das Ziel ist es, die Vim-Art der Textbearbeitung und somit die angelernten Gewohnheiten in Programmen zur Verfügung zu stellen, die den &kappname;-Texteditor als ihren internen Editor verwenden.

Der VI-Modus hat zum Ziel, sich in die Programme zu integrieren und, wo sinnvoll, das Verhalten von Vim nachzubilden. Zum Beispiel öffnet ``:w`` in &kappname;s VI-Modus einen Dialog zum Speichern.

Um den VI-Modus für alle neuen Ansichten zu aktivieren, gehen Sie auf Einstellungen&kappname; einrichten ... Bearbeitung VI-Eingabemodus. Auf dieser Karteikarte können Sie den VI-Modus einrichten und die Tastenzuordnungen für diesen Modus anlegen und ändern. Der VI-Modus kann auch mit dem Menüpunkt VI-Eingabemodus im Menü Bearbeiten ein- bzw. ausgeschaltet werden. (Der Standardkurzbefehl ist &Meta;&Ctrl;V, wobei &Meta; normalerweise die Windows-Taste ist.)

Viele Kurzbefehle im VI-Modus beachten die Groß- und Kleinschreibung, im Gegensatz zu den meisten &kde;-Kurzbefehlen. Das heißt, dass `y` und `Y` verschiedene Kurzbefehle sind. Um den Befehl `y` (kopieren) einzugeben, überprüfen Sie dass die Feststelltaste nicht aktiviert ist und drücken Y auf der Tastatur. Um den Befehl `Y` (kopieren bis zum Zeilenende) einzugeben, drücken Sie die Tastenkombination &Shift;Y.

Die betrifft nicht die Kurzbefehle mit der &Ctrl;-Taste, die unabhängig vom Status der Feststelltaste und ohne Drücken der &Shift;-Taste eingegeben werden können. Bei einige Befehle jedoch muss bei einer Tasteneingabe nach der Tastenkombination mit der &Ctrl;-Taste die Groß-/Kleinschreibung berücksichtigt werden. Um zum Beispiel den Befehl &Ctrl;W, `h` (Wechsel zum rechten Fenster der geteilten Ansicht) einzugeben, überprüfen Sie dass die Feststelltaste nicht aktiviert ist, drücken die Tastenkombination &Ctrl;W und dann H.

### Inkompatibilitäten mit Vim

Es gibt ein paar Funktionen in &kappname;s VI-Modus, die mit Vim nicht kompatibel sind (abgesehen von den fehlenden Funktionen). Diese sind hier aufgelistet, einschließlich. der entsprechenden Begründungen.

- &kappname;: `U` und &Ctrl;R ist Wiederherstellen.

  Vim: &Ctrl;R ist normales Wiederherstellen; U macht alle Änderungen in einer Zeile rückgängig.

  Der Grund dafür, in &kappname;s VI-Modus U für die Wiederherstellen-Aktion zu verwenden, ist, dass der Kurzbefehl &Ctrl;R voreingestellt von &kappname;s Ersetzen-Funktion belegt ist (Suchen und ersetzen). Der VI-Modus überschreibt keine &kappname;-Kurzbefehle (dies kann in Einstellungen&kappname; einrichten ... Bearbeitung Vi-Eingabemodus eingestellt werden), weshalb eine Wiederherstellen-Aktion auch über einen normalen Tastendruck verfügbar sein muss. Davon abgesehen lässt sich die Funktionsweise des `U`-Befehls aus Vim nicht gut auf das interne System zum Rückgängigmachen in &kappname; abbilden, weshalb es nicht einfach wäre, dies zu unterstützen.

- &kappname;: der Befehl ``print`` öffnet den Dialog Drucken.

  Vim: der Befehl ``print`` gibt die Zeilen des angegebenen Bereichs wie sein Vorläufer ed aus.

  Befehle wie ``:print`` sind nicht nur im VI-Modus, sondern für alle &kappname;-Benutzer verfügbar. Daher öffnet der ``:print``-Befehl den bekannten Dialog zum Drucken, anstatt das Verhalten von Vim nachzubilden.

- &kappname;: `Y` kopiert bis zum Ende der Zeile.

  Vim: `Y` kopiert gesamte Zeile, genau wie `y` `y`.

  Das Verhalten des `Y`-Befehls von VI kann als Fehlerhaft angesehen werden. Beim Ändern und Löschen wirken sich `c` `c`/ `d` `d` auf die gesamte Zeile aus und `C`/`D` arbeiten von der aktuellen Cursor-Position bis zum Zeilenende. Beide, `y` `y` und `Y` hingegen kopieren die gesamte Zeile. In &kappname;s VI-Modus kopiert `Y` bis zum Zeilenende kopieren. Dieses Verhalten wird in der Vim-Dokumentation als logischer beschrieben.

- &kappname;: `O` und `o` öffnen [`eine Anzahl`] neuer Zeilen und wechseln in den Eingabemodus.

  Vim: `O` und `o` öffnen eine neue Zeile und fügen den eingegebenen Text [`so oft`] ein, sobald der Eingabemodus verlassen wird.

  Diese unterscheiden sich hauptsächlich, weil sich viele Benutzer im Vim-&irc;-Kanal (#vim auf Libera Chat) verwirrt über die Funktionsweise geäußert haben.

### Wechseln der Modi

- Im Normalen Modus können Sie Befehle zum Navigieren und Ändern eines Dokuments eingeben. Dieser Modus ist der Standardmodus. Sie können aus allen anderen Modi mit der &Esc;-Taste in diesen Modus zurückkehren.

- Im Visuellen Modus können Sie Text in einem Dokument markieren. Die meisten Befehle aus dem Normalen Modus sind auch in diesem Modus gültig. Zum zeichenweise auszuwählen, wechseln in diesen Modus, indem Sie die Taste `v` drücken; für zeilenweise Auswahl, drücken Sie `V`.

- Im Eingabemodus können Sie das Dokument direkt bearbeiten. Sie wechseln in diesen Modus, indem Sie die Taste `i` oder einen der anderen, oben genannten Befehle drücken.

- Der Befehlsmodus ruft &kappname;s Befehlszeile auf. Hier können Sie viele in Vi implementierte Befehle wie auch spezielle Befehle für &kappname; aufrufen. Weitere Informationen über diese Befehle finden Sie unter advanced-editing-tools-commandline. Um diesen Modus zu benutzen, drücken Sie die Taste :, geben den Befehl ein und drücken dann die &Enter;taste.

### Einbindung in &kate;'s Funktionen

- Es wird automatisch in den Visuellen Modus gewechselt, wenn Text mit der Maus ausgewählt ist. Dieser Wechsel findet auch dann statt, wenn Funktion von &kate; benutzt werden, die Text auswählen, wie zum Beispiel Alles auswählen aus dem Menü oder mit dem Kurzbefehl &Ctrl;A.

- Marker in Vi und Lesezeichen in &kate; sind integriert. Erstellen Sie einen Marker im Vi-Modus, dann wird auch das zugehörige Lesezeichen für &kate; erstellt und im Menü Lesezeichen angezeigt. Umgekehrt wird mit einem Lesezeichen in &kate; auch der zugehörige Marker in Vi an Spalte Null der Zeile erzeugt.

### Unterstützte Befehle im normalen/visuellen Modus

`a` | Wechselt zum Eingabemodus und fügt hinter dem Cursor ein
`A` | Wechselt zum Eingabemodus und fügt hinter der Zeile ein
`i` | Wechselt zum Eingabemodus und fügt vor dem Cursor ein
&Ins; | Wechselt zum Eingabemodus und fügt vor dem Cursor ein
`I` | Wechselt zum Einfügemodus und fügt vor dem ersten nicht leeren Zeichen auf der Zeile ein
`gi` | Wechselt zum Einfügemodus und fügt vor der Stelle ein, an der der letzte Einfügemodus verlassen wurde
`v` | Wechsel in den visuellen Modus; Auswahl von Zeichen
`V` | Wechsel in den visuellen Modus; Auswahl von Zeilen
&Ctrl;v | Wechselt in den visuellen Modus; Auswahl von Blöcken
`gb` | Wechselt in den visuellen Modus und aktiviert die letzte Auswahl erneut
`o` | Fügt unter der aktuellen Zeile eine neue Zeile ein
`O` | Fügt über der aktuellen Zeile eine neue Zeile ein
`J` | Zeilen zusammenführen
`c` | Ändern: gefolgt von einer Richtungstaste; löscht ein Zeichen und wechselt in den Eingabemodus
`C` | Bis zum Zeilenende ändern: löscht bis zum Zeilenende und wechselt in den Eingabemodus
`cc` | Zeile ändern: Zeile löschen und in den Eingabemodus wechseln
`s` | Zeichen ersetzen
`S` | Zeilen ersetzen
`dd` | Zeile löschen
`d` | Gefolgt von einer Richtungstaste, um eine Zeile zu löschen
`D` | Löschen bis Zeilenende
`x` | Zeichen rechts vom Cursor löschen
∇ | Zeichen rechts vom Cursor löschen
`X` | Zeichen links vom Cursor löschen
`gu` | Gefolgt von einer Richtungstaste, um ein Zeichen in Kleinbuchstaben zu ändern
`guu` | Ändert die aktuelle Zeile in Kleinschreibung
`gU` | Gefolgt von einer Richtungstaste, um ein Zeichen in Großbuchstaben zu ändern
`gUU` | Ändert die aktuelle Zeile in Großschreibung
`y` | Gefolgt von einer Richtungstaste, um eine Zeile zu kopieren
`yy` | Zeile kopieren
`Y` | Zeile kopieren
`p` | Hinter dem Cursor einfügen
`P` | Vor dem Cursor einfügen
`]p` | Hinter dem Cursor mit Einrückung einfügen
`[p` | Vor dem Cursor mit Einrückung einfügen
`r` | Gefolgt von einem Zeichen, um das Zeichen hinter dem Cursor zu ersetzen
`R` | Zu Ersetzungsmodus wechseln
`:` | Zu Befehlsmodus wechseln
`/` | Suchen
`u` | Rückgängig
&Ctrl;R | Wiederherstellen
`U` | Wiederherstellen
`m` | Marker setzen (kann später zum Navigieren verwendet werden)
`n` | Weitersuchen
`N` | Frühere suchen
`>>` | Zeile einrücken
`<<` | Zeileneinrückung rückgängig
`>` | Zeilen einrücken
`<` | Einrückung mehrere Zeilen rückgängig
&Ctrl;F | Seite nach unten
&Ctrl;B | Seite nach oben
`ga` | &ASCII;-Wert des Zeichens ausgeben
`.` | Letzte Änderung wiederholen
`==` | commandAlignLine
`=` | commandAlignLines
`~` | Groß-/Kleinschreibung des aktuellen Zeichens ändern
&Ctrl;S | Ansicht waagerecht teilen
&Ctrl;V | Ansicht senkrecht teilen
&Ctrl; W, `w` | Wechselt zum nächsten Fenster der geteilten Ansicht
&Ctrl; W, `h` &Ctrl; W&Left; | Wechselt zum linken Fenster der geteilten Ansicht
&Ctrl; W, `l` &Ctrl; W&Right; | Wechselt zum rechten Fenster der geteilten Ansicht
&Ctrl; W, `k` &Ctrl; W&Up; | Wechselt zum oberen Fenster der geteilten Ansicht
&Ctrl; W, `j` &Ctrl; W&Down; | Wechselt zum unteren Fenster der geteilten Ansicht

### Unterstützte Richtungstasten

Diese können zum Bewegen in einem Dokument im Normalen und im Visuellen Modus oder im Zusammenspiel mit einem der oben genannten Befehle verwendet werden. Es können Nummern angehängt werden, um anzugeben, wie oft die entsprechende Bewegung ausgeführt werden soll.

`h` | Links
&Left; | Links
&Backspace; | Links
`j` | Nach unten
&Down; | Nach unten
`k` | Nach oben
&Up; | Nach oben
`l` | Rechts
&Right; | Rechts
&Space; | Rechts
`$` | Zum Zeilenende
&End; | Zum Zeilenende
`0` | Zum ersten Zeichen der Zeile (Spalte 0)
&Home; | Zum ersten Zeichen der Zeile
`^` | Erstes Zeichen, das kein Leerzeichen ist, in dieser Zeile
`f` | Gefolgt von einem Zeichen rechts vom Cursor, zu dem der Cursor bewegt werden soll
`F` | Gefolgt von einem Zeichen links vom Cursor, zu dem der Cursor bewegt werden soll
`t` | Gefolgt von einem Zeichen rechts vom Cursor, vor das der Cursor bewegt werden soll
`T` | Gefolgt von einem Zeichen links vom Cursor, vor das der Cursor bewegt werden soll
`gg` | Zur ersten Zeile
`G` | Zur letzten Zeile
`w` | Nächstes Wort
`W` | Nächstes Wort getrennt durch Leerzeichen
`b` | Vorheriges Wort
`B` | Vorheriges Wort getrennt durch Leerzeichen
`e` | Wortende
`E` | Ende des Worts getrennt durch Leerzeichen
`ge` | Ende des vorheriges Wortes
`gE` | Ende des vorherigen Worts getrennt durch Leerzeichen
`|` | Gefolgt von einer Spaltennummer, um in die Spalte zu springen
`%` | Gefolgt von einem Element, um zu dem Element zu springen
``` | Marker
`‘` | Erstes Zeichen, das kein Leerzeichen ist, in der Zeile, in der sich der Marker befindet
`[[` | Vorherige öffnende eckige Klammer
`]]` | Nächste öffnende eckige Klammer
`[]` | Vorherige schließende eckige Klammer
`][` | Nächste schließende eckige Klammer
&Ctrl;I | Geht zur nächsten Adresse
&Ctrl;O | Geht zur vorherigen Adresse
`H` | Geht zur ersten Zeile auf dem Bildschirm
`M` | Geht zur mittleren Zeile auf dem Bildschirm
`L` | Geht zur letzten Zeile auf dem Bildschirm
`%`Prozentsatz`` | Geht zum angegebenen Prozentsatz des Dokuments
`gk` | Geht optisch eine Zeile aufwärts (bei dynamischem Zeilenumbruch)
`gj` | Geht optisch eine Zeile abwärts (bei dynamischem Zeilenumbruch)
&Ctrl;&Left; | Verschiebt ein Wort nach links
&Ctrl;&Right; | Verschiebt ein Wort nach rechts

### Unterstützte Textobjekte

Diese können verwendet werden, um bestimmte Bereiche eines Dokuments auszuwählen.

`iw` | Inneres Wort: Wort inklusive Leerzeichen
`aw` | Ein Wort: Wort ohne Leerzeichen
`i"` | Vorherige Anführungszeichen (`"`) bis nächste Anführungszeichen, inklusive der Anführungszeichen
`a”` | Vorherige Anführungszeichen (`"`) bis nächste Anführungszeichen, ohne die Anführungszeichen
`i'` | Vorherige einfache Anführungszeichen (`"`) bis nächste einfache Anführungszeichen, inklusive der Anführungszeichen
`a'` | Vorherige einfache Anführungszeichen (`"`) bis nächste einfache Anführungszeichen, ohne die Anführungszeichen
`i(` | Vorherige öffnende Klammer [`(`] bis nächste schließende Klammer [`)`], inklusive der Klammern
`a(` | Vorherige öffnende Klammer [`(`] bis nächste schließende Klammer [`)`], ohne die Klammern
`i[` | Vorherige öffnende eckige Klammer (`[`) bis nächste schließende eckige Klammer (`]`), inklusive der Klammern
`a[` | Vorherige öffnende eckige Klammer (`[`) bis nächste schließende eckige Klammer (`]`), ohne die Klammern
`i{` | Vorherige öffnende geschweifte Klammer (`{`) bis nächste schließende geschweifte Klammer (`}`), inklusive der Klammern
`a{` | Vorherige öffnende geschweifte Klammer (`{`) bis nächste schließende geschweifte Klammer (`}`), ohne die Klammern
`i<` | Vorherige öffnende spitze Klammer (`<`) bis nächste schließende spitze Klammer (`>`), inklusive der Klammern
`a<` | Vorherige öffnende spitze Klammer (`<`) bis nächste schließende spitze Klammer (`>`), ohne die Klammern
`i`` | Vorheriges Backtick („rückwärts geneigtes Hochkomma“) (`"`) bis nächstes Backtick, inklusive der Backticks
`a`` | Vorheriges Backtick („rückwärts geneigtes Hochkomma“) (`"`) bis nächstes Backtick, ohne die Backticks

### Unterstützte Befehle im Eingabemodus

&Ctrl;D | Einrückung verringern
&Ctrl;T | Einrücken
&Ctrl;E | Von unten einfügen
&Ctrl;Y | Wort löschen
&Ctrl;W | Wort löschen
&Ctrl;U | Zeile löschen
&Ctrl;J | Neue Zeile
&Ctrl;H | Löscht Zeichen rückwärts
&Ctrl;&Home; | Geht zum ersten Zeichen im Dokument
&Ctrl;R `n` | Fügt den Inhalt des Registers `n` ein
&Ctrl;O, `Befehl` | Wechselt für einen Befehl zum normalen Modus
&Ctrl;A | Verringert die aktuell gewählte Zahl
&Ctrl;X | Erhöht die aktuell gewählte Zahl

### Das Komma-Textobjekt

Dieses Objekt fehlt in Vim. Das Komma-Text-Objekt vereinfacht das Ändern von Parameterlisten in C-ähnlichen Sprachen und anderen durch Komma getrennte Listen. Dies ist der Bereich zwischen zwei Kommas oder einem Komma und einer Klammer. In der Demonstrationszeile sind die Bereiche, die dieses Text-Objekt umfassen kann, hervorgehoben.

Ein Beispiel für ein Komma-Textobjekt Ein Beispiel für ein Komma-Textobjekt

Bereiche des Komma-Text-Objekts. Wenn sich der Cursor ⪚ über `arg2` befindet, bewirkt das Drücken von `ci`(inneres Komma ändern), dass `double arg2` gelöscht wird und der Cursor im Eingabemodus zwischen die beiden Kommas platziert wird. Das ist ein sehr angenehme Art, Funktionsparameter zu ändern.

### Fehlende Funktionen

Wie bereits erwähnt, ist es nicht Ziel des VI-Modus in &kappname;, die Funktionen von Vim zu 100 % zu unterstützen.