updated:  2024 20. November
published:  2020 28. August

VIM

The Best Editor ever.

Eine kurze Befehlsübersicht findest du hier .

Vim-Modi

Vim verwendet verschiedene Modi zwischen denen man durch folgende Tasten wechselt.

  • Kommandomodus
[:] allgemein bzw. Befehl
[/] suchen abwärts ab Cursorposition
[?] suchen aufwärts ab Cursorposition
  • Editier- oder Einfügemodus
[i] insert
[a] append
[R] Replace - Ersetzenmodus
[u] Undo - letzte Änderung rückgängig
[Strg]+[r] Redo - letzte Änderung wieder herstellen
  • Visualmodus - Text markieren
[V] Zeilenweise
[v] Zeichenweise
[Strg]+[v] Blockweise
[v][a][b] nächster ()-Block
[v][a][B] nächster {}-Block

Bedienung des Editors

Die Bedinung des VIM-Editors erfolgt hauptsächlich mit der Tastatur.

Im Kommandomodus kann der Cursor mit folgenden Tasten positioniert werden.

Taste(n) Cursorsprung zu/nach
[g][g] oben in die erste Zeile
[Shift]+[g] unten in die letzte Zeile
[w] Wortanfang vorwärts
[b] Wortanfang rückwärts
[^] Zeilenanfang
[$] Zeilenende
[Strg]+[d] halbe Seite nach unten
[Strg]+[u] halbe Seite nach oben
[3][+] 3 Zeilen vorwärts
[5][+] 5 Zeilen vorwärts
[2][-] 2 Zeilen rückwärts
[Shift]+[k] Springt zur Hilfe am Wort

Befehle im Kommandomodus (eine Auswahl)

Beispielhaft sind einige Befehle imm Kommandomodus aufgeführt.

Befehl Beschreibung
:reg Register und Zwischenpuffer anzeigen
:di Register und Zwischenpuffer anzeigen
:pwd aktuelles Verzeichnis
:f aktuellen Dateinamen anzeigen

Statusinformationen ausgeben

Taste(n)/Befehl Information
[Strg]+[g] vollen Pfad der Datei anzeigen
[g][a] Detailinformation des Zeichens an der Cursorposition
[g][Strg]+[g] Dateilinformation der Zeile an der Cursorposition

Optionen setzten mit dem Befehl - set

Optionen werden im Kommandomodus [:] gesetzt.

 :set list                  " aktiviert eine Option
 :set nolist                " deaktiviert eine Option
 :set list?                 " Abfragen der Option
 :set all                   " Anzeigen aller Optionen

Beispieleinstellungen über die Funktion set. Diese können auch direkt in .vimrc gespeichert werden.

 syntax on
 set nocompatible               " Verhalten für Cursortasten (Pfeiltasten) einstellen
 set backspace=2                " Verhalten für Rücktaste und Entfernungstaste einstellen
 set backspace=indent,eol,start " wie oben
 set lines=40 columns=180       " Startgröße für Fenster, insbesondere Gvim
 set lbr                        " Zeilenumbruch nach vollständigem Wort
 set wrap                       " lange Zeilen umbrechen (ggf. über mehrere Zeilen)
 set cursorline                 " Cursorzeile hervorheben
 set hlsearch                   " Suchbegriff hervorheben
 set number                     " Zeilennummerierung einschalten
 set incsearch                  " Markiert sofort das Suchwort
 set tabstop=4                  " Breite eines Tabulatorstops
 set expandtab                  " Setzt Leerzeichen anstelle des Tabulatorzeichens
 retab                          " In Verbindung mit expandtab werden vorhanden Tabulatorzeichen in Leerzeichen umgewandelt
 set list                       " anzeigen von Tabulator (^I) und Zeilenende ($) im Text
 set nolist                     " deaktiviert das Anzeigen von Tabulatoren und Zeilenende im Text
 set ruler                      " Cursorposition in Statuszeile anzeigen 

Zum deaktivieren wird einfach das Prefix no vorangesetzt.

 set nohlsearch               " Suchbegriff-Highlight deaktivieren
 set nonumber                 " Zeilennummerierung abschalten
 set noexpandtab              " Setzt Tabulatorzeichen anstelle der Leerzeichen

Suchen und ersetzen

Die Such- und Ersetzungsfunktion erfolgt im Kommandomodus [:]. Dabei können reguläre Ausdrücke verwendet werden.


 :1,$s/  \+/ /gc	//Suchen nach doppelten Leerzeichen von der 1 Zeile bis zur letzten ($) und ersetze mit einem Leerzeichen.
 :1,$s/$/;/gc		//fügt vor dem Zeilenende ($) ein Semikolon ein
 :1,$s/ab/a\rb/gc	//Zeilenumbruch (\r) einfügen zwischen a und b
 :5,9s/a\c/XX/gc	//Suchen zwischen den Zeilen 5 und 9 nach Buchstaben a oder A (Option \c) und ersetze in XX.
 :s/[a-z]/\U&\e/gc		//wandelt Klein- in Großbuchstaben
 :s/\([a-z]\+\)/\U&\e/gc	//Ganze Wörter in Großbuchstaben umwandeln
   

Und hier mal der Link zu spektakulären und umfangreichen regulären Ausdrücken in VIM.

Suchmuster gruppieren

Die Zeichen \( \) gruppieren ein Suchmuster. Die Gruppe wird im Ersetzungsteil als \1 bzw. bei mehreren Gruppen als fortlaufende Nummer referenziert.


 # Sucht alle zweistelligen Zahlen und fügt die Zeichen zzz davor und dahinter
 :1,$s/\([0-9][0-9]\)/zzz\1zzz/gc

 Beispiel:
	33 ->  zzz33zzz			
	45 ->  zzz45zzz			

 # Syntax mit 2 Gruppen, Beispiel Uhrzeitangaben
 :1,$s/\([0-9][0-9]\)\:\([0-9][0-9]\)/zzz\1\:\2zzz/gc
 
 Beispiel:
	15:03 ->  zzz15:03zzz			
	20:40 ->  zzz20:40zzz			

 # Beispiel Datum in einer Gruppe
 :1,$s/\([0-9][0-9]\.[0-9][0-9]\.2023\)/oo\1\oo/gc
 
 Beispiel:
	01.03.2023 -> oo01.03.2023oo
	27.12.2023 -> oo27.12.2023oo
   

Andere Syntaxdateien verwenden

Speichere deine Syntaxdatei z.B. markdown2.vim im Verzeichnis: C:\users\<name>\vimfiles\syntax und setze den Namen der Syntaxdatei im Befehlsmodus von VIM.

 set syn=markdown2
 set syn

Zeichensatz - Formatierung und Kodierung

Zeichensatzformatierung und -kodierung sind immer ein heikles Thema in Textdateien, auf einer Terminalkonsole oder im Betriebssystem. VIM unterstützt eine ganze Reihe von Zeichenkodierungen . Die wichtigsten sind: utf-8 und latin1


 " Zeichensatzkodierung in VIM
 set encoding=utf-8         " Zeichensatzkodierung auf utf-8
 set encoding=latin1        " Zeichensatzkodierung auf latin1 entspricht ANSI

 " Zeichensatzkodierung der geöffneten Datei
 set fileencoding           " zeigt die aktuelle Dateikodierung an

 " Zeichensatzformatierung der Datei
 set fileformat             " zeigt die aktuelle Zeichensatzformatierung (dos, unix, mac)
 set fileformat=unix        " Stellt das Zeichensatzformat der Datei auf Unix um, es wird ein <LF> an das Zeilenende gehängt.
 set fileformat=dos         " Stellt das Zeichensatzformat der Datei auf Dos um, es wird ein <CR><LF> an das Zeilenende gehängt.
                            " <LF> = Linefeed (Zeilenvorschub), bewegt den Cursor nach unten. 
                            "        Symbol: [Ctrl-J] oder [^J] oder hex 0A
                            " <CR> = Carriage Return (Wagenrücklauf), bewegt den Cursor auf die linke Ecke. 
                            "        Symbol: [Ctrl-M] oder [^M] oder hex 0D   
   
Beispieleinstellungen in VIM für ein Linux Bashscript (*.sh) in Windows

 set encoding=utf-8
 set fileencoding=latin1
 set fileformat=unix

Hinweis: Um auf der DOS-Kommandokonsole die Zeichensatztabelle anzupassen, siehe Codepages.

Umschalten auf Hexadezimal Code


 :%!xxd			- Umschalten auf Hexadezimalcode
 :%!xxd -r		- Zurück auf Text

ASCII Hexacode Escape Beschreibung
0d \r CR - Wagenrücklauf (carriage return)
0a \n LF - Zeilenvorschub (line feed)
09 \t Horizontaler Tabulator
a 61 Buchstabe a
b 62 Buchstabe b

Vimdiff

Mit Vimdiff werden Unterschiede zweier Dateien angezeigt.


 vim    -d datei.1 datei.2
 vimdiff   datei.1 datei.2

Ist der Editor bereits mit einer Datei geöffnet, dann kann mit folgendem Kommando eine zweite Datei hinzugezogen werden.


 :vertical diffsplit datei.2

Zum navigieren zwischen den Änderungen werden folgende Tastenkombinationen verwendet.

]c Springt nach unten zur nächsten Änderung. Wobei mit der Tastenkombination [Alt GR] + [9] die schließende Klammer erreicht wird.
[c Springt nach oben zur vorhergehenden Änderung. Wobei mit der Tastenkombination [Alt GR] + [8] die öffnende Klammer erreicht wird.

Um das umständliche Agieren mit der Tastatur zu vereinfachen, wird die Tastenkombination in den Funktionstasten F5 und F6 verlegt. Entweder während des Betriebs im Kommandomodus …


 :map <F5> ]c
 :map <F6> [c

… oder als Eintrag in ~/.vimrc


 map <F5> ]c
 map <F6> [c

Stichworte (tags)