vi / vim


Vi oder Vim ist ein einfacher Leistungsstarker Texteditor für die Linux/Unix Kommandzeile.

Bei Debian Systemen ist Standardmäßig nur eine leichtgewichtige Version von Vim installiert. Will man Vim mit mehr Eigenschaften, wie mehrfaches Rückgängigmachen, Syntaxhervorhebung, Kommandozeilenhistorie, Online-Hilfe u.s.w, sowie Unterstützung für das Skripten mit Perl, Python, Ruby und Tcl, kann das Paket „vim-nox“ (Debian, Ubuntu) installiert werden.




Durch das Ausfühhren von „vi“ oder „vim“ können eine oder mehr Dateien in den „vi“ geladen werden. Zwischen den Dokumenten wechseln funktioniert mit :next (Vorwärts) oder :Next (Rückwärts). Ist eine zu öffnende Datei nicht vorhanden wird sie erstellt.


Syntax:

  • vi [opt] [datei] [datei2]




Optionen:

  • +[zahl] ⇒ Öffnet Datei bei Zeile zahl.
  • -b ⇒ Startet Vi im Binärmodus.
  • -d ⇒ Startet Vi im diff Modus.






Kommandomodus


Wenn „vi“ gestartet wurde, befindet er sich im Kommandomodus. Hier kann man den Text nicht direkt bearbeiten, jedoch …

  • im Text bewegen.
  • Zwischenablagerungsoptionen durchführen.
  • löschungen vornehmen.
  • Datei durchsuchen.
  • Datei speichern und schließen.



In den Kommandomodus kann man mit der [Esc] Taste umschalten.



Einfügemodus


Im Einfügemodus kann man Text mit dem „vi“ Editor bearbeiten. In den Einfügemodus gelangt man mit der [Einfügen] Taste, oder…

  • i ⇒ Wechselt von der aktuellen Cursorposition in den Einfügemodus.
  • I ⇒ Wechselt am Anfang der aktuellen Zeile in den Einfügemodus.
  • a ⇒ Wechselt hinter der aktuellen Cursorposition in den Einfügemodus.
  • A ⇒ Wechselt am Ende der aktuellen Zeile in den Einfügemodus.
  • :r [datei] ⇒ Liest neue Datei hinter aktueller Datei ein.
  • :e [datei] ⇒ Neue Datei einlesen.
  • :e! [datei] ⇒ Neue Datei öffnen alte schließen erzwingen.



Um wieder in den Kommandomodus zu gelangen, die [Esc] Taste drücken.



Ersetzenmodus


In den Ersetzenmodus gelangt man, in dem die [Einfügen] Taste zweimal gedrückt wird, oder…

  • R ⇒ wechselt von der aktuellen Cursorposition in den Ersetzenmodus.



Um wieder in den Kommandomodus zu gelangen, [Esc] drücken.



Visuellermodus


Dieser Modus dient zum Markieren, Kopieren und ausschneiden von Text.

  • v ⇒ Wechselt vom Kommando in den Visuellen Modus.



Um wieder in den Kommandomodus zu gelangen, [Esc] drücken.






  • :e [dateiname] ⇒ Öffnet Datei dateiname(oder neu), aktuelle Datei wird geschlossen.
  • :next ⇒ Zur nächsten geöffneten Datei.
  • :Next ⇒ Zur letzten geöffneten Datei.






Dazu muß sich der „vi“ im Kommandomodus befinden.


  • :w [dateiname] ⇒ Speichert die Datei als dateiname (ist die Datei vorhanden, ist die Angabe des Dateinamens Optional).
  • :w! ⇒ Speichern erzwingen.
  • :x! ⇒ Speichern erzwingen und vi beenden.
  • :wq ⇒ Datei speichern und vi beenden.
  • :x ⇒ Speichert Datei und beendet vi.
  • ZZ ⇒ Speichert die aktuelle Datei und beendet vi.
  • :q ⇒ Beendet vi.
  • :q! ⇒ Beendet den Editor auch, wenn Datei nicht gespeichert ist (Änderungen gehen verloren).






Im Kommandomodus kann man wie folgt navigieren.


  • h ⇒ Bewegt den Cursor um ein Zeichen nach links.
  • l ⇒ Bewegt den Cursor um ein Zeichen nach rechts.
  • k ⇒ Bewegt den Cursor um eine Zeile nach oben.
  • j ⇒ Bewegt den Cursor um eine Zeile nach unten.
  • G ⇒ Bewegt den Cursor zum Ende der Datei.
  • H ⇒ Bewegt den Cursor zum Anfang des Dokuments.
  • L ⇒ Bewegt den Cursor zum unteren Bildschirmrand.
  • b ⇒ Bewegt den Cursor um ein Wort nach links.
  • w ⇒ Bewegt den Cursor um ein Wort nach rechts.
  • ge ⇒ Bewegt den Cursor zum Wortende links.
  • e ⇒ Bewegt den Cursor zum Wortende rechts.
  • $ ⇒ Bewegt den Cursor zum Zeilenende.




Man kann hier auch Zahlen voranstellen z.B. 20j bewegt den Cursor 20 Zeilen nach unten.




[x] steht optional für eine Zahl.

  • [x]j ⇒ X Zeilen nach unten.
  • [x]k ⇒ X Zeilen nach oben.
  • [x]cursor-re ⇒ X Zeichen nach rechts.
  • [x]cursor-li ⇒ X Zeichen nach links.
  • [x]cursor-hoch ⇒ X Zeilen hoch.
  • [x]cursor-runter ⇒ X Zeilen runter.
  • [x]+ ⇒ X Zeilen nach unten.
  • [x]- ⇒ X Zeilen nach oben.
  • [x]w ⇒ X Worte nach re.
  • [x]b ⇒ X Worte nach li.
  • [x]e ⇒ Ende des x Wortes.
  • Pos1 ⇒ Zeilenanfang.
  • Ende ⇒ Zeilenende.
  • gg ⇒ Textanfang.
  • G ⇒ Textende.
  • [x]gg ⇒ X Zeile im Text.






Im Kommandomodus stehen folgende Möglichkeiten zur Textbearbeitung zur Verfügung:

  • ~ ⇒ Groß und Kleinschreibung ändern.
  • << ⇒ Zeile nach links verschieben.
  • >> ⇒ Zeile nach rechts verschieben.
  • yy ⇒ Kopiert Inhalt der aktuellen Zeile in die Zwischenablage.
  • p ⇒ Fügt Inhalt der Zwischenablage unter die Zeile, in der sich der Cursor befindet.
  • P ⇒ Fügt Inhalt der Zwischenablage ober die Zeile, in der sich der Cursor befindet.
  • J ⇒ Zwei Zeilen Zusammenfassen.
  • [x]x, Entf ⇒ X Zeichen löschen.
  • [x]X ⇒ Zeichen rückwärts löschen.
  • [x]D ⇒ Zeichen von cursor bis x Zeile löschen.
  • [x]dd ⇒ X ganze Zeilen löschen.
  • dd ⇒ Löscht die Zeile, in der sich der Cursor befindet.
  • D ⇒ Löscht den Text hinter dem Cursor bis zum Zeilenende.
  • cc ⇒ Schneidet komlette Zeile aus, kopiert sie in die Zwischenablage und wechselt automatisch in den Einfügemodus.
  • C ⇒ Schneidet Text hinter dem Cursor aus, kopiert sie in die Zwischenablage und wechselt automatisch in den Einfügemodus.
  • o ⇒ Fügt neue Zeile unterhalb der Cursorposition ein und wechselt automatisch in den Einfügemodus.
  • O ⇒ Fügt neue Zeile oberhalb der Cursorposition ein und wechselt automatisch in den Einfügemodus.
  • [Strg + K] ⇒ Leitet einen Digraphen ein.
  • [CRTL + N] ⇒ Leitet im Einfügemodus die Stichwortergänzung wortweise ein.
  • [Strg + X] | [Strg + L] ⇒ Leitet im Einfügemodus die Stichwortergänzung zeilenweise ein.
  • [Strg + N] | [Strg + P] ⇒ Blättern.





Puffer anlegen / einfügen


Puffer können von „0-9“ und „a-z“ anlegt werden.


  • a dd ⇒ Löscht aktuelle Zeile und legt sie in Puffer a.
  • b dd ⇒ Lösche aktuelle Zeile und legt sie in Puffer b.
  • a yy ⇒ Kopiert aktuelle Zeile in den Puffer a.
  • a20 yy ⇒ Kopiert die nächsten 20 Zeilen in den Puffer a.
  • a p ⇒ Puffer a einfügen.
  • b p ⇒ Puffer b einfügen.
  • A yy ⇒ Fügt aktuelle Zeile zu Puffer a hinzu.





Textstellen marken



  • by'a ⇒ Kopiert den Inhalt von Marke a bis aktueller Cursor Position in Puffer b.
  • :marks ⇒ Zeigt alle Marken an.
  • :'a ⇒ Gehe zu Marke a.




Im visuellen Modus [v], oder [V] wird Zeilenweise markiert, mit [^v] erfolgt eine Blockweise Markierung. Um den visuellen Modus zu verlassen, verwendet man die Aktivierungstasten ein oder mehrmals. Alternativ geht das auch mit den Tasten [^+c] oder 3x[Esc] hintereinander.

Mit den Cursor Tasten bzw. [Pos1] und [Ende] wird der Cursor am Anfang bzw. am Ende der Zeile gesetzt. Den Curor Wortweise vorwärs setzen, funktioniert mit [e] bzw. [b] für Wortweise rückwärs. Mit [x] oder [d] lassen sich Textbereiche ausschneiden. Das drücken von [y] kopiert die Zeile oder den markierten Text in die Zwischenablage, dabei wechselt „vi“ in den normalen Modus. Jetzt kann man mit [p] den Inhalt der Zwischenablage rechts vom Cursor, bzw. mit [P] links vom Cursor einfügen.


  • v ⇒ Visueller Modus Zeichenweise.
  • V ⇒ Visueller Modus Zeilenweise.
  • ^v ⇒ Visueller Modus Blockweise.
  • vv ⇒ Visuellen Modus verlassen.
  • ^c ⇒ Visuellen Modus verlassen.
  • 3x[Esc] ⇒ Visuellen Modus verlassen.
  • [Cursor], [Pos1], [Ende] ⇒ Text markieren.
  • e ⇒ Text wortweise vorwärts markieren.
  • b ⇒ Text wortweise rückwärts markieren.
  • x, d ⇒ Text ausschneiden.
  • y ⇒ Text kopieren.
  • p ⇒ Text links vom Cursor einfügen.
  • P ⇒ Text rechts vom Cursor einfügen.





Suchen und Ersetzen



  • /[suchwort] ⇒ Sucht nach der Zeichenkette suchwort.
  • / ⇒ Sucht nach dem nächsten Vorkommen der Zeichenkette suchwort.
  • ? ⇒ Sucht rückwärts nach dem letzten Vorkommen der Zeichenkette suchwort.
  • n ⇒ Weitersuchen rechts.
  • N ⇒ Weitersuchen links.
  • [x]f[a-zA-Z] ⇒ Springe zum x-ten Vorkommen von [a-zA-Z].
  • xp ⇒ Tausche Zeichen gegen das nächste.
  • # ⇒ Suche nach String unter cursor vorwärts.
  • * ⇒ Suche nach String unter cursor rückwärts.






Ex - Befehle werden im Kommando Modus mit [:] eingeleitet und mit [Enter] ausgeführt.


  • :'a ⇒ Gehe zu Marke a.
  • :. ⇒ Aktuelle Zeile.
  • :2 ⇒ Gehe zu Zeile 2.
  • :5,10 ⇒ Von Zeile 5 - 10.
  • :1,$ ⇒ Erste bis letzte Zeile (Datei).
  • :.,$ ⇒ Von der aktuellen bis zur letzten.
  • :% ⇒ Ganze Datei.
  • :.,+6 ⇒ Aktuelle Zeile und die nächsten 6 Zeilen.
  • :'a,'f ⇒ Von Marke a bis f.




Mit den Ex Befehlen lassen sich Befehle wie Kopieren, Löschen und einfügen kombinieren.




  • :'b,'by ⇒ Inhalt der Marke b in unbekannten Zahlenpuffer kopieren.
  • :'a,'by a ⇒ Inhalt der Marke a - b in Puffer a kopieren.
  • :'a,'bd ⇒ Inhalt der Marke a bis b löschen.
  • :'a,'bmn ⇒ Inhalt der Marke a bis b in die Position n kopieren.
  • :'a,'bm$ ⇒ Inhalt der Marke a bis b an das Ende der Datei kopieren.
  • :16,29d ⇒ Zeilen n bis m löschen.
  • :n,mm10 ⇒ Zeilen n bis m zur Zeile 10 verschieben.
  • :16,29co$ ⇒ Zeilen n bis m an das Ende der Datei kopieren.





Suchen und Ersetzen




  • :/muster ⇒ Sucht nach muster ab akt. Position.
  • :?muster ⇒ Sucht rückwärts ab akt. Position.
  • :?muster/y p ⇒ Sucht nach muster vor akt. Position und speichert die Zeile in Puffer p.
  • :/muster/d ⇒ Sucht nach muster und löscht entspr. Zeile.
  • :/muster/d a ⇒ Sucht nach muster, löscht entspr. Zeile und übergibt Zeile Puffer a.
  • :/muster/+d ⇒ Sucht nach muster und lösche die Zeile darunter.
  • :/muster1/,muster2/d ⇒ Löscht die Zeilen zwischen muster1 und muster2.
  • :/muster1/,muster2/+5d ⇒ Löscht Zeilen zwischen muster1 und muster2 und die fünf nächsten.
  • :.,muster/m66 ⇒ Verschiebe die Zeilen von der aktuellen Position bis zum muster in Zeile 66.





Globale Suche in einer Datei




  • :g/muster ⇒ Zeigt alle Zeilen mit muster.
  • :g/muster/nu ⇒ Zeigt alle Zeilen mit muster, mit Zeilennummerierung.
  • :g!/muster/ ⇒ Zeigt alle Zeilen, die nicht mit muster übereinstimmen.
  • :5,15g/muster/ ⇒ Zeigt alle Zeilen mit muster in den Zeilen 5 bis 15.
  • :g/muster/d ⇒ Sucht alle Zeilen mit muster und löscht diese.
  • :g/muster/co$ ⇒ Sucht alle Zeilen mit muster und kopiert sie ans Ende der Datei.
  • :g/muster/m16 ⇒ Sucht alle Zeilen mit muster und verschiebt sie nach Zeile 16.
  • :g/muster/y X ⇒ Sucht alle Zeilen mit muster und kopiert sie in den Puffer x.





Ersetzen




  • :s/alt/neu ⇒ Sucht und ersetzt alt durch neu (erstes auftreten in akt. Zeile)
  • :s/alt/neu/g ⇒ Sucht und ersetzt alle alt durch neu in aktueller Zeile
  • :1,5s/[suchen]/[ersetzen]/g ⇒ Von erster bis fünfter Zeile.
  • :1,$s/alt/neu ⇒ Ersetzen im gesamten Dokument.
  • :r [datei] ⇒ Inhalt von Datei in aktuelle Datei schreiben.
  • :1,20w [neue datei] ⇒ Inhalt der aktuellen Datei in neue Datei schreiben.
  • :30,$w >> [neue datei] ⇒ Inhalt der aktuellen Datei in neue Datei anhängen.
  • :v/123/ ⇒ Sucht Zeilen in denen 123 nicht enthalten ist.
  • :s/alt/neu/gi ⇒ Wie oben aber ohne Groß- und Kleinschreibung.
  • :s/alt/neu/gc ⇒ Ersetzt jedes Vorkommen von alt durch neu mit Bestätigung.
  • :1,6s/alt/neu/ ⇒ Ersetzt erstes Vorkommen von alt durch neu von Zeile 1 bis 6.
  • :%s/alt/neu/ ⇒ Ersetzt erstes Vorkommen von alt durch neu in der Datei.
  • :g/muster/s/alt/neu/g ⇒ Sucht Zeilen mit muster und ersetze jedes Vorkommen von alt durch neu.








  • u ⇒ Letzten Befehl wiederholen.
  • [x]u ⇒ [x] Befehle rückgängig machen.
  • ^r ⇒ Rückgängig gemachten Befehl wiederherstellen.
  • [x]^R ⇒ [x] rückgängig gemachte Befehle wiederherstellen.
  • . ⇒ Befehl wiederholen.
  • [x]. ⇒ Letzten Befehl [x] wiederholen.








  • ^ ⇒ Zeilenanfang.
  • $ ⇒ Zeilenende.
  • . ⇒ Beliebiges Zeichen einmal.
  • * ⇒ Beliebiges Zeichen, ein bis unendlich viele.
  • \< ⇒ Wortanfang.
  • \> ⇒ Wortende.
  • [d1-d3] ⇒ Ein Zeichen im Bereich d1 bis d3.
  • [^d-y] ⇒ Ein Zeichen nicht im Bereich von d bis y.
  • \r ⇒ Return.
  • \t ⇒ Tab.
  • \s ⇒ Leerzeichen.
  • \S ⇒ Nichtleerzeichen.
  • \= ⇒ Kein oder ein Treffer.
  • \+ ⇒ Ein bis unendlich.
  • \| ⇒ Oder.
  • \( \) ⇒ Speichert muster in einem Puffer, der über \n aufgerufen werden kann.
  • \& \n ⇒ Das muster selbst, der im Puffer \( \) gespeicherten muster.








  • ^[Pp]eter ⇒ Paßt auf Peter u. peter.
  • :s/\([^,]\+\), \(.*\)/\2 \1/ ⇒ Macht aus nachname, vorname vorname nachname.
  • :s/\>„/\&laquo;/g ⇒ Macht aus …
<p>Der "Apfel" fällt "nicht "weit" vom Stamm".</p>




<p>Der »Apfel« fällt »nicht »weit« vom Stamm«.</p>
  • :s/&laquo;\([^&]\+\)\(&laquo;\)/&lsaquo;\1\2/ ⇒ Wandelt um in …
<p>Der »Apfel« fällt »nicht ›weit‹ vom Stamm«.</p>








  • map! ä &auml;
  • map! ö &ouml;
  • map! ü &uuml;
  • map! ß &szlig;
  • map! Ä &Auml;
  • map! Ö &Ouml;
  • map! Ü &Uuml;
  • map! ,c &lt;&gt;[Esc]10hi
  • map! ,ah <a href=“„ title=“„></a>[Esc]14hi
  • map! ,sp [Esc]6hi






Vi öffnen und Cursor an Zeile 66 positionieren.

vi datei1 +66




Vi öffnen und Cursor bei „suchwort“ positionieren.

vi datei1 +/suchwort




  • vi [datei1] [datei2] … ⇒ Vi öffnet mehrere Dateien.
  • vi -R [datei] ⇒ Read only Modus (kann nur unter neuem Namen oder mit ! gespeichert werden).
  • :![script] ⇒ Führt das Script aus, der Editor bleibt geöffnet.




Ein Kommando kann mehrmals aufgerufen werden, wenn man eine Zahl voranstellt.




  • 16dd ⇒ Löscht die aktuelle und 15 folgenden Zeilen.
  • 42yy ⇒ Kopiert 42 Zeilen in die Zwischenablage.
  • 13cc ⇒ Schneidet die aktuelle und zwölf folgenden Zeilen aus.






Mit Fenster arbeiten




  • [Strg+w+s] ⇒ Waagerechte Teilung.
  • [Strg+w+v] ⇒ Senkrechte Teilung.
  • [Strg+w+q] ⇒ Aktueles Fenster schließen.
  • [Strg+w+h] ⇒ Nach links.
  • [Strg+w+j] ⇒ Nach unten.
  • [Strg+w+k] ⇒ Nach oben.
  • [Strg+w+l] ⇒ Nach rechts.
  • [Strg+w+w] ⇒ Nächstes Fenster.





Mit Tabs arbeiten




  • :tab [pfad/dateiname] ⇒ Datei in neuen tab öffnen.
  • [g+t] ⇒ Nach Tab rechts bewegen.
  • :q ⇒ Aktuellen Tab schließen.





Konfigurationseinstellungen


Benutzerdefinierte „vi“ Einstellungen werden in den Dateien “~.vimrc„ (auf Nutzerebene) oder global in “/etc/vimrc„.


  • :set ⇒ Zeigt vi einstellungen in vimrc.
  • :set[option] ⇒ Option wird gesetzt.
  • :set no[option] ⇒ Option wird abgeschaltet.
  • :se[option] ⇒ Abfrage des Wertes von Option.
  • :se all ⇒ Werte aller Optionen anzeigen.
  • :syntax on|off ⇒ Syntaxhighlight aktivieren|deaktivieren.




Optionen:

  • ap ⇒ Änderungen werden am Screen angezeigt (default).
  • aw ⇒ Beim Beenden wird automatisch der Puffer zurückgeschrieben.
  • bf ⇒ Entfernung aller Steuerzeichen.
  • ht ⇒ Tabulator schrittweite.
  • ic ⇒ Ignorecase (keine Gross u. Keinschreibung wird unterschieden).
  • nu ⇒ Zeilennummerierung einschalten.
  • scroll ⇒ Scrollbereich bestimmen.
  • sh ⇒ Bestimmt die Shell, deren Kommandos innerhalb des Editors aufgerufen werden können.
  • ts ⇒ Setzt die länge des Tabulators (z.B. :set ts=4).
  • wa ⇒ Rüchschreiben des Puffers in Orginaldatei.




Diese Einstellungen können im „Vim“ auch dauerhaft, in der Datei “.vimrc„ im Heimatverzeichnis oder global in “/etc/vimrc„ bzw. “/etc/vim/vimrc„ vorgenommen werden.




Beispiel einer vimrc:

set number
set autoindent
syntax on
set ts=4












Cloud