Vim/Anwendung

Aus Foxwiki

Einführung

Der Editor vi (visual) ist ein bildschirmorientierter Editor, das heißt der Text ist in seiner aktuellen Version auf dem Bildschirm zu sehen

Vim verfügt über drei verschiedene Arbeitsmodi

  • Diese werden im folgenden kurz beschrieben
  • Die wichtigsten Tastenkürzel zur Arbeit mit dem Vim werden im Artikel Vim/Shortcuts erläutert

Nach dem Aufruf des vi befindet sich der Benutzer im Kommandomodus

  • Die Arbeit spielt sich wie beim ed immer in zwei Ebenen ab

Kommandomodus

  • Freies Positionieren innerhalb des Textes
  • Umsetzen von Textblöcken
  • Schreiben und Lesen von Dateien
  • Löschen von Textblöcken und Aufruf von UNIX-Kommandos

Eingabemodus

  • Einfügen von Text
  • Überschreiben vorhandener Textpassagen
  • Das Umschalten zwischen den Modi erfolgt mit der [ESC]-Taste
  • Die Handhabung des Kommandomodus des vi macht die Bedienung für den Anfänger etwas ungewohnt
  • Die Cursorpositionierung erfolgt mit verschiedenen Tasten, für die Eingabe von Dateibefehlen oder anderen Funktionen (z. B.  Suchen/ersetzen) ist die Eingabe eines Doppelpunktes nötig
  • Man befindet sich dann in ex-Modus, der ähnliche Eigenschaften hat, wie der Editor ed

Starten

vi [Dateiname]
  • Ist die Datei vorhanden, wird sie in den Editorpuffer geladen, andernfalls wird sie neu angelegt
  • Wird der vi ohne die Angabe eines Dateinamens gestartet, ist der Bildschirm auf der linken Seite mit Tilden (~) gefüllt
  • Jede leere Zeile hinter dem Ende der Datei wird auf diese Art dargestellt
  • Am unteren Ende des Bildschirms wird der Dateiname anzeigt, falls eine existierende Datei angegeben wurde
    • Die Größe der Datei wird ebenfalls angezeigt
    • Wenn diese Informationen nicht angezeigt werden, könnte es sein, dass der Terminaltyp falsch gesetzt ist
    • Dann sollte der vi mit :q! und [ENTER] verlassen und der Terminaltyp korrekt eingestellt werden

Falls die angegebene Datei nicht existiert, wird auf folgende Art angezeigt, dass es sich um eine neue Datei handelt

"newfile" [New file]

Nach dem Start ohne Dateinamen, ist die unterste Bildschirmzeile leer

Hilfen

man vi Manualpage von vi aufrufen
:h <Stichwort> Hilfe aufrufen (mit :q verlassen)
vimtutor Lernprogramm

Befehlsmodus

Nach dem Aufruf befindet sich Vim im Befehlsmodus

Vergleichbar mit Klicken durch die Menüs eines grafischen Programms

Tastenkürzel Aktion
j Schritt abwärts
k Schritt aufwärts
h Schritt nach links
l Schritt nach rechts
dd löscht eine komplette Zeile an der Cursorposition
u macht letzte Änderung rückgängig
STRG + R macht u rückgängig
ZZ speichert die Datei und beendet Vim

Einfügemodus

Befindet sich der Vim im Einfügemodus, so kann der Text nach Belieben editiert werden

Tastenkürzel Aktion
i Editiermodus an der Cursorposition starten
a Editiermodus eine Stelle hinter der Cursorposition starten
o Zeile unterhalb der Cursorposition einfügen und Editiermodus starten
ESC Editiermodus verlassen

Kommandozeilenmodus

Neben Befehlen, die zum Bewegen durch die Datei oder deren Modifikation dienen, kann man im Kommandozeilenmodus auch Parameter des Programms selber ändern, Dateien laden und/oder (Shell-) Befehle ausführen

  • Das Verhalten ist mit einer Mini-Kommandozeile vergleichbar
Tastenkürzel Aktion
:w Datei speichern
:w name Datei unter name speichern
:q! Vim ohne Speichern beenden
/such_ausdruck Datei nach such_ausdruck durchsuchen
:e datei_name Datei datei_name öffnen
:e # zur zuvor bearbeiteten Datei zurückkehren

Cursorpositionierung

Normalerweise ist der vi an die Pfeiltasten der Tastatur richtig angepasst

  • Daneben gibt es noch folgende Möglichkeiten (Auswahl)
h Zeichen links (auch Backspace)
l Zeichen rechts (auch blank)
k Zeile höher
j Zeile tiefer
b Wortanfang
e Wortende
w Anfang nächstes Wort
H Anfang erste Zeile des Bildschirms
L Anfang letzten Zeile des Bildschirms
0 (Null) Zeilenanfang
$ Zeilenende
RETURN nächste Zeile
nG (Go) Gehe zu Zeile n. n ist eine Zeilennummer
  • Fehlt die Zahl, wird zur letzten Zeile der Datei gesprungen
% sucht zur aktuellen Klammer die korrespondierende öffnende oder schließende Klammer
( Cursor zum Anfang des Satzes bewegen
) Cursor zum Anfang des nächsten Satzes bewegen
{ Cursor zum Anfang des Absatzes bewegen
} Cursor zum Anfang des nächsten Absatzes bewegen

Befehls-Modus

Die Befehle des Befehls-Modus haben folgendes Format

[Anzahl] Befehl [Ort]
  • Die meisten Befehle sind ein Zeichen lang
  • Mit Anzahl wird ein Wiederholungsfaktor dür den folgenden Befehl angegeben
  • So löscht zum Beispiel der Befehl x das Zeichen unter der Schreibmarke
  • Wird 10x eingegeben, werden 10 Zeichen gelöscht

Einige Befehle nutzen einen optionalen Ort-Parameter, der angibt, wieviele Zeilen oder wieviel Text des Dokuments vom Befehl bearbeitet werden soll

  • Der Ort-Parameter kann auch jeder Befehl sein, der die Schreibmarke bewegt

Allgemeine Befehle

:q vi beenden (wenn keine Änderungen)
:q! vi beenden und Änderungen verwerfen

Dateibefehle

:r Datei Text aus der angegebenen Datei nach der momentanen Zeile einfügen
:w Datei speichern
:w! Datei speichern und Schreibschutz ignorieren
:w Datei Speichern unter ... (angegebene Datei wird überschrieben)
:w >> Datei Text an die angegebene Datei anhängen
:wq oder :x oder ZZ Text speichern und vi beenden

Mehrere Dateien bearbeiten

Um mehr als eine Datei zu bearbeiten, können beim Aufruf mehrere Dateinamen übergeben oder nachträglich weitere Dateien geöffnet werden

:e Datei Neue Datei bearbeiten
:n Wechselt zur nächsten geladenen Datei

Blättern auf dem Bildschirm

Normalerweise ist der vi an die Pfeiltasten der Tastatur richtig angepasst

  • Daneben gibt es noch folgende Möglichkeiten (Auswahl)
STRG-F Eine Bildschirmseite vorwärts
STRG-B Eine Bildschirmseite rückwärts
STRG-D Eine halbe Bildschirmseite vorwärts
STRG-U Eine halbe Bildschirmseite rückwärts
STRG-L Bildschirm neu aufbauen (wenn zum Beispiel eine Nachricht kam)

Texteingabe

i (insert) Eingabe links vom Cursor
I Eingaben am Zeilenanfang
a (append) Eingabe rechts vom Cursor
A (appand) Eingabe am Zeilenende
o Neue Zeile unter der aktuellen Zeile
O Eingabe in der vorhergehenden Zeile, Spalte 1

Der Eingabemodus wird durch Drücken der [ESC]-Taste verlassen

Text ändern

~ Wechsel Groß-/Kleinbuchstaben (kein Abschluss mit [ESC])
r Zeichen ersetzen (kein Abschluss mit [ESC])
R Mehrere Zeichen ersetzen
s Ein Zeichen ersetzen und zusätzliche Zeichen anschließend einfügen
cc Gesamte Zeile ändern
cw Wort ändern
C ab Cursorposition bis Zeilenende ändern
J Zeilen verbinden (nächste Zeile anhängen)

Text ausschneiden

x Zeichen unter dem Cursor löschen
X Zeichen vor dem Cursor löschen
dw ab Cursorposition bis Wortende löschen
db ab Cursorposition bis Wortanfang löschen
ndd n ganze Zeile löschen
D Ab Cursor bis Zeilenende löschen

Gelöschte Zeichen werden im anonymen Puffer abgelegt

Kopieren und Einfügen

  • Yank wird in der Regel mit einem zweiten Steuerbuchstaben kombiniert, der angibt, wie viel Text gepuffert wird. (z. B.  "yw", "y$")
  • Vor "yy" kann noch die Anzahl der zu kopierenden Zeilen stehen (z. B.  12yy)
yy oder Y (Yank) ganze Zeile in anonymen Puffer kopieren
yw Bis zum nächsten Wort kopieren
Y$ Bis Zeilenende kopieren
p Hinter dem Cursor einfügen
P Vor dem Cursor einfügen

Suchen und Ersetzen

Außer 'fx' und 'Fx' müssen die Suchkommandos mit der Return-Taste abgeschlossen werden

fx Zeichen 'x' in der momentanen Zeile suchen (vorwärts)
Fx Zeichen 'x' in der momentanen Zeile suchen (rückwärts)
/str String 'str' vorwärts in der Datei suchen
?str String 'str' rückwärts in der Datei suchen
// Letzten Suchbefehl wiederholen (vorwärts)
?? Letzten Suchbefehl wiederholen (rückwärts)
:%s/X/Y/g Ersetzt alle 'X' durch 'Y'

Sonstige Kommandos

u Letzten Befehl rückgängig machen
U Aktuelle Zeile wiederherstellen
Letztes Kommando wiederholen
:!cmd Verlässt vi temporär und führt das Kommando cmd aus (ggf. Rückkehr mit exit)
:r!cmd Fügt die Ausgabe von cmd ab Cursorposition ein
!!cmd Benutzt aktuelle Zeile als Eingabe für cmd und ersetzt durch dessen Ausgabe
Strg + g Zeilennummer und Dateiinfo zeigen

Markierungen

v Visuelles Markieren
mA Marke A setzen
'A Zur Marke A springen
d'A Bis Marke A löschen
y'A Kopieren bis Marke A

Einrücken und klammern

<< rückt die aktuelle Zeile um eine Einrückungsbreite nach links
>> rückt die aktuelle Zeile um eine Einrückungsbreite nach rechts
% Bewegt die Einfügemarke zwischen korrespondierenden Klammern

Tipps und Tricks

Zeile verschieben

  • Zeile mit dd löschen
  • Zur neuen Position wechseln
  • mit p (hinter dem Cursor)
  • P (vor dem Cursor) einfügen

Zeile kopieren

  • Zeile mit yy in den Puffer kopieren
  • Zur neuen Position wechseln
  • Zeile mit p (vor dem Cursor)
  • oder P (nach dem Cursor) einfügen

Ein paar einfache Tricks

  • zwei aufeinander folgende Zeichen vertauschen: xp
  • zwei aufeinander folgende Zeilen vertauschen: ddp
  • eine Zeile duplizieren: yyp

Mehrere Zeilen verschieben oder kopieren

Mehrere Zeilen werden durch Voranstellen der Zeilenzahl vor dd oder yy in den Puffer gebracht. Alles Weitere wie oben

Weitere Puffer

  • Neben dem anonymen Puffer können 26 weitere Pufferbereiche verwendet werden, die durch einen Buchstaben ("a" - "z") bezeichnet werden
  • Dazu wird ein Doppelapostroph und der Puffername vor den Befehl gestellt, zum Beispiel
"ayy kopiere Zeile in Puffer a
"b6yy kopiere die nächsten 6 Zeilen in Puffer b
"ap Inhalt Puffer a nach dem Cursor einfügen

Blöcke von einer Datei in die andere übertragen

  • Mit dem Kommando :e <dateiname> kann eine neue Datei bearbeitet werden, ohne den vi zu verlassen
  • vi mit der ersten Datei aufrufen, z. B. : vi foo.txt
  • Textblock mit den Yank-Kommando in einen Puffer schreiben: "f10yy (10 Zeilen in Puffer f)
  • neue Datei holen, z. B. : :e bar.txt
  • an die gewünschte Stelle gehen und Puffer einfügen: "fp