Sitzungsnavigation: keine Veranstaltung ausgewählt. (Veranstaltung wählen.)

Der Editor VIM (ITG/slu)




1. Allgemeines

Vim ist ein Editor, kein Textverarbeitungsprogramm. Mit vim ist keine typographische Textgestaltung möglich, typische Textverarbeitungsfunktionen wie etwa Fußnotenverwaltung stehen nicht zur Verfügung. Vim dient ausschließlich zur Bearbeitung der "reinen" Textsubstanz. Es wird auch zur Erzeugung und Bearbeitung von Computercode (Programmen) eingesetzt.

Vim ist für alle gängigen Betriebssysteme kostenfrei verfügbar (https://www.vim.org/download.php). Es handelt sich um sog. "Charity Ware", d.h. die Nutzer werden zu einer Spende für einen guten Zweck aufgefordert.

Vim gilt als "sperrig" mit einer zunächst flachen, dann aber steil ansteigenden Lernkurve. Bei souveräner Beherrschung gilt er als besonders effizient und anderen Editoren überlegen.

2. Konfiguration

Die userspezifische Konfiguration von vim wird in der Datei _vimrc (unter Windows) bzw. .vimrc (unter Linux; im DHVLab ist eine geeignete Version im Ordner /files/courses/Korpling_MA abgelegt) festgelegt. "rc" steht für "run control". Sowohl unter Windows wie auch unter Linux muss die Datei im Homeverzeichnis des Users liegen (unter Windows normalerweise: c:\Benutzer\[Anmeldename]). Vim sollte niemals ohne eine an die persönlichen Erfordernisse angepasste vimrc-Datei verwendet werden. Der Inhalt der Datei wird von Vim beim Programmstart gelesen.

Die vimrc-Datei lässt sich am einfachsten editieren, indem man vim öffnet und dann den folgenden Befehl eingibt:

:e $MYVIMRC

" VIM-Konfigurationsdatei zur Verwendung auf Windows-Rechner. Abzuspeichern im Homeverzeichnis des Users (z.B. c:\users\[Benutzername] oder c:\Benutzer\[Benutzername]
" Einzelne Zeilen können durch Voranstellung eines doppelten Anführungszeichens (")
" deaktiviert bzw. durch deren Entfernung aktiviert werden
" Download (Win): http://www.kit.gwi.uni-muenchen.de/wp-content/uploads/2015/03/_vimrc
" Download (Linux): http://www.kit.gwi.uni-muenchen.de/wp-content/uploads/2015/03/.vimrc
source $VIMRUNTIME/mswin.vim " Laden der VIM-Skript-Datei mswin.vim, die VIM so konfiguriert, dass es sich in wie von Windows-Programmen gewohnter Weise bedienen läßt (v.a. spezielle Tastenkombinationen wie z.B. ctrl-c ⇒ copy); funktioniert auch unter Linux-Systemen wie z.B. dem Desktop des dhvlab
behave mswin " Windows-typisches Verhalten, d.h. von Windows-Usern gewohnte Tastenkombinationen funktionieren auch in VIM (z.B. ctrl-c ⇒ copy und ctrl-v ⇒ paste) 
set helplang=de " Sprache der Hilfefunktion. "de" meist wirkungslos, da nur Englisch verfügbar
set history=200 " Anzahl der in der Datei _viminfo protokollierten Befehle und Suchmuster
set hlsearch " Bei Suche nach Zeichenfolgen werden Treffer farblich hervorgehoben
set incsearch " Bei Suche nach Zeichenfolgen wird jeweils der erste Treffer angezeigt, der dem bis dahin eingegebenen Suchmuster entspricht
set keymodel=startsel,stopsel " 
set ruler " Anzeige von Zeilen- und Spaltennummer (rechts unten)
set selection=exclusive
set selectmode=mouse,key " Textmarkierung/-auswahl mit Maus und Tastatur
set whichwrap=b,s,<,>,[,]
set ignorecase " Groß-/Kleinschreibung bei Suchvorgängen irrelevant
" set noignorecase " Groß-/Kleinschreibung bei Suchvorgängen relevant
syntax enable " Farbliche Paraphrasierung von Code-Syntax. Weitere standardmäßig installierte Colorschemes: 
colorscheme desert " Farbschema mit schwarzem Hintergrund. Weitere normalerweise verfügbare Colorschemes: blue, default, desert, evening, industry, lunaperche, murphy, peachpuff, retrobox, shine, sorbet, wildcharm, zellner, darkblue, delek, elflord, habamax, koehler, morning, pablo, quiet, ron, slate, torte, zaibatsu
" colorscheme default " Standard-Farbschema 
set fileformats=dos,unix,mac " Zeilenende-Kodierungen, die VIM beim Öffnen einer Datei berücksichtigt bzw. auf die eine Datei geprüft wird
set fencs=utf-8,ucs-bom,latin1 " Zeichenkodierungen, auf die eine Datei beim Öffnen nacheinander getestet wird (in der gegebenen Reihenfolge)
set encoding=utf-8 " Von VIM intern (z.B. beim Schreiben in die Datei _viminfo) verwendete Standardkodierung 
set fileencoding=utf-8 " Standardkodierung beim Speichern von Dateien
set nu " Anzeige von Zeilennumerierung
set tabstop=2 " Anzahl von Bildschirmspalten pro Tabstop
set guifont=Courier_New:h12:cANSI " Auswahl des Fonts, der von gVim verwendet werden soll. Wichtig ist, dass dieser auf dem System auch verfügbar ist
set autoindent " Automatische Übernahme der Zeileneinrückung bei Einfügen eines Zeilenumbruchs
autocmd GUIEnter * simalt ~x " veranlasst gvim, mit maximiertem Fenster zu starten
set foldenable
set fdm=indent
set expandtab " legt fest, dass Spaces anstelle von Tabs für Einrückungen verwendet werden
set shiftwidth=2

Die installierten Colorschemes können mit folgendem Befehl angezeigt werden:

:colorscheme gefolgt von "Space" gefolgt von  ctrl+d

Sämtliche in der _vimrc festgelegten Einstellungen können während der Arbeit mit dem Programm jederzeit geändert werden. Anstelle von "set" kann auch die Kurform "se" verwendet werden.

# Anzeige von Zeilennummern: 
:se nu         # Einschalten von Zeilennummern; 
:se nonu       # Ausschalten

# Einstellung der Dateikodierung
:se fenc       # Dateikodierung; vorzugsweise utf-8; weitere: latin1, utf-16, utf-32 etc.

# Einstellung des Dateiformats (Auswirkung auf Kodierung des Zeilenendes)
:se fileformat # dos, unix/linux, mac
  • Manche Schriftarten stellen Sonderzeichen nicht dar (kleine Quadrate als Platzhalter). Eine große Anzahl von Glyphen enthält die Schrift Courier_New (wenigstens unter Windows). 
  • Farbschemata können ausgewählt werden über das Menü "Editieren" ⇒ "Farbschema ..." (alternativ durch das Kommando ":colorscheme [name des Farbschemas]")

3. Die "Modi" von Vim

Vim wird auch als "modaler" Editor bezeichnet, da er verschiedene "Modi" kennt. Am häufigsten verwendet werden die folgenden vier Modi.

3.1. Kommandomodus

Nach dem Start des Programms befindet sich vim im Kommandomodus. Dies lässt sich an der Gestalt des Cursors erkennen: Im Kommandomodus hat er die Form eines Rechtecks (s. Abb.). Im Kommandomodus haben sämtliche Tasten auf der Tastatur Sonderfunktionen.

Übersicht über die wichtigsten Tastenbefehle im Kommandomodus:

# Kommandomodus. Funktion der Tastenkombination "ga" ("get ascii value").
ga (Anzeige des Zahlenwerts des Zeichens, auf dem sich der Cursor befindet):

Fenster des Editors Vim mit dem IPA-Zeichen für Schwa (hex 0283)

Das Drücken der Escape-Taste führt stets in den Kommandomodus.

3.2. Einfügemodus

Die Eingabe von Text ist nur im sog. Einfüge-Modus möglich. Um vom Kommandomodus in den Einfügemodus zu gelangen kann man folgende Tasten verwenden:

i  # "insert"; Einfügemarke wird *vor* das Zeichen gesetzt, auf dem der Cursor steht
a  # "append"; Einfügemarke wird *hinter* das Zeichen gesetzt, auf dem der Cursor steht
I  # Einfügemarke wird an den Anfang der aktuellen Zeile gesetzt
A  # Einfügemarke wird an das Ende der aktuellen Zeile gesetzt
o  # "open"; Cursor am Anfang einer neue Zeile unterhalb der aktuellen Zeile
O  # Cursor am Anfang einer neue Zeile oberhalb der aktuellen Zeile

Im Einfügemodus ist er ein schmaler Strich ("Einfügemarke").

3.3. Visual mode

Der visual mode (visueller Modus) dient v.a. der Markierung von Text. Aus dem Kommandomodus gelangt man durch Drücken der Taste "v" in den visual mode. Führt man anschließend Cursorbewegungen aus, werden die entsprechenden Textpassagen markiert. Im visual mode können auch Suchen durchgeführt werden. Sämtlicher Text, der sich zwischen der Cursorposition und dem gematchten Suchstring befindet, wird markiert.

3.4. Kommandozeilen-Modus

In den Kommandozeilen-Modus gelangt man aus dem Kommandomodus durch das Drücken des Doppelpunkts (":"). Der Cursor springt in die linke untere Ecke des Vim-Fensters. Dort können nun einzeilige Kommandos eingegeben werden, die bei Drücken der Entertaste ausgeführt werden. Sehr häufig werden auf diese Weise Textersetzungen ausgeführt, z.B.:

:%s/alt/neu/gc

Mehrere solche Kommandos können durch das Pipe-Symbol ("|") mit einander verbunden werden. Sie werden dann beim Drücken der Entertaste nacheinander ausgeführt, z.B.:

:%s/alt/neu/g | %s/neu/neu2/g | w

4. Bewegen in der Datei, löschen, kopieren, einfügen

Im Kommandomodus gilt folgende Tastenbelegung:

gg     # Cursor an den Anfang der Datei
G      # An das Ende der Datei
0      # An den Anfang der Zeile
$      # An das Ende der Zeile

dd     # löscht die Zeile, in der sich der Cursor befindet
3dd    # löscht die Zeile, in der sich der Cursor befindet und die zwei Zeilen darunter
D      # löscht den Zeileninhalt von der Position des Cursors bis zum Zeilenende

yy     # nimmt die Zeile, in der sich der Cursor befindet in den Zwischenspeicher
p      # setzt den Inhalt des Zwischenspeichers an der Stelle des Cursors ein

o      # erzeugt eine neue leere Zeile und wechselt in den Eingabemodus

u      # "undo" - macht Änderungen rückgängig. Mehrfaches Drücken von u geht in
       # in der Änderungshistorie zurück

ctrl + r     # "redo" - schreitet nach Verwendung von undo in der Änderungshistorie 
             # wieder vorwärts

5. Öffnen, Speichern, Schließen

Kontextmenü in Windows ⇒ beliebige Dateien mit vim öffnen: Rechter Mausklick auf Dateisymbol ⇒ "Bearbeite mit Vim" / "Edit with vim":

Kontextmenü in Windows mit Option zum Editieren einer Datei mit Vim

# Öffnen einer Datei aus vim heraus:
:e [Name der Datei, ggf. mit Pfad]

# Speichern einer Datei:
:w

# Schließen/Verlassen einer Datei:
:q

# Schließen/Verlassen einer Datei erzwingen:
:q!

# Speichern und verlassen einer Datei: 
:wq
# Verkettung mehrerer Kommandos durch die "Pipe" (|)
:%s/ab/cd/gc | se fenc=unix | w

6. Suchen

Nach Eingabe des Slash (/) im Kommandomodus können am unteren Fensterrand Suchmuster eingegeben werden. Die Suche erfolgt von der Stelle, an der sich der Cursor aktuell befindet nach unten. Bei Drücken des Fragezeichens (?) wird gleichfalls die Suchfunktion aufgerufen, die Suche erfolgt dann aber von der aktuellen Cursorposition nach oben. Alle Zeichenketten im Text, die dem Suchmuster entsprechen, werden farblich hervorgehoben. Zum Ausschalten dieser farblichen Hervorhebung muss im Kommandomodus :nohl ("no Highlighting") eingegeben werden.

Als Suchmuster können auch Reguläre Ausdrücke verwendet werden. Durch Drücken der Sterntaste (*) wird eine Suche ausgelöst, die das gesamte Dokument nach dem Token durchsucht, auf dem sich der Cursor gerade befindet. Bei jeder Suche werden die Treffer im Dokument farblich hervorgehoben. Durch Drücken der Taste n im Kommandomodus springt der Cursor zum jeweils nächsten Treffer in der Datei (N springt zum nächsten Treffer oberhalb).

# Finde alle Strings "Haus"
/Haus

# Suche nach Tokens, die aus exakt drei Zeichen bestehen
/\<...\>

Die Berücksichtigung der Groß/Kleinschreibung kann beeinflusst werden durch die folgenden Kommandos:

:se ignorecase     " keine Berücksichtigung
:se noignorecase   " Berücksichtigung

Reguläre Ausdrücke in VIM

Bei Verwendung von regulären Ausdrücken gelten im wesentlichen die üblichen Regeln. Allerdings gibt es einige VIM-spezifische Besonderheiten bzw. Erweiterungen. Zu den Besonderheiten gehört vor allem, dass eine Reihe von Metazeichen mit einem Backslash maskiert werden müssen. Sehr nützlich sind die folgenden zusätzlichen Metazeichen bzw. Metazeichenfolgen, die in der Standardsyntax der Regulären Ausdrücke fehlen:

\{-}    ⇒    ein "nicht-gieriger" Wiederholungsoperator ("as few as possible")
\_.     ⇒    "any character including a newline"; ermöglicht zeilenübergreifende Suche

S. auch https://www.dh-lehre.gwi.uni-muenchen.de/?p=328&v=0#chapter:7-beispiele-fuer-res-nach-vim-syntax

Gut gemachte Dokumentationen zu den Regulären Ausdrücken in Vim:

7. Ersetzen

Für Ersetzungen muss im Kommandomodus zunächst der Doppelpunkt (:) eingegeben werden. Anschließend können am unteren Fensterrand (= Kommandozeilenmodus) Suchmuster und Ersetzungsstrings eingegeben werden. Als Suchmuster können auch Reguläre Ausdrücke verwendet werden. 

Allgemeine Syntax: 
:[Bereich]s/[Suchmuster]/[Ersetzung]/[Optionen]

[Bereich]: 
1,3                 # Zeile 1 bis inkl. 3
4,$                 # Zeile 4 bis zur letzten Zeile
%                   # Alle Zeilen (alternativ: 1,$)
leer oder .         # aktuelle Zeile

[Suchmuster]: 
Reguläre Ausdrücke

[Ersetzung]: 
String

[Optionen]: 
g ("global" - nicht nur erster Treffer in Zeile, sondern alle)
c ("confirm" - Einzelbestätitigung => y = "yes", n = "no", a = "all", q = "quit")
# Einfaches Beispiel
:s/Haus/Hof/c   # Ersetzt (nur!) das erste Vorkommen innerhalb einer Zeile von "Haus"
                # durch "Hof"

Beispiele für Ersetzungsbefehle:

# Leerzeilen entfernen
:%s/\s*\n//gc
# Satzzeichen durch Leerzeichen von Wörtern isolieren
# \(...\) definiert eine regex-Gruppe (s. Reguläre Ausdrücke)
:%s/\([a-zäüöß]\)\([.,;?!:)\]]\)/\1 \2/gc
# XML-Tags entfernen
:%s/<\_.\{-}>//gc    # \_. ⇒ "any character including a newline"
# Ersetzung von Zeichen unter Verwendung von deren hexadezimalen Zahlenwert
# Beispiel: Ersetze das "e" (hex 0065) durch "a":
:%s/\%u0065/a/gc

Sämtliche in einer Datei vorgenommenen Änderungen (Ersetzungen, aber auch manuelle Texteingaben) können durch Drücken des Buchstabens u im Kommandomodus rückgängig gemacht werden. Mit jedem weiteren Drücken des u werden weiter zurückliegende Änderungen des Textes rückgängig gemacht. Durch u rückgängig gemachte Änderungen, können durch ctrl-r wieder zurückgeholt werden.

8. Eingabe von Sonderzeichen

Im Einfügemodus kann wie gewohnt über die Tastatur Text eingegeben werden. Eine Besonderheit besteht in der Möglichkeit, Sonderzeichen über die Eingabe von deren Zahlenwert innerhalb der Unicode-Tabelle in ein Dokument zu schreiben. Zu diesem Zweck muss die Tastenkombination ctrl-q (je nach Konfiguration unter Umständen auch ctrl-v) gedrückt werden. Anschließend muss der Buchstabe "u" (für "unicode") gedrückt und dann der hexadezimale Zahlenwert des gewünschten Zeichens eingegeben werden:

ctrl-q (bei "behave mswin"; unter Linux auch ctrl-v) + u + [vierstellige Hex-Zahl] 

ODER 

ctrl-q + U + [achtstellige Hex-Zahl]

Beispiel: 
ctrl-q + u + 0283 ⇒  LATIN SMALL LETTER ESH

9. Filtern von Zeilen

Analog zum Unix-Tool kann man in Vim Zeilen filtern, die bestimmte Zeichenmuster (regex) enthalten. Beispiel:

:vimgrep '^.* = text' % | cwin

Das Prozentzeichen (%) gibt an, dass der Befehl auf die komplette Datei angewendet werden soll. Teilbereiche einer Datei können nicht angegeben werden. cwin öffnet am unteren Bildschirmrand ein Fenster, indem die Zeilen angezeigt werden, die dem Suchmuster entsprechen. In diesem Fenster kann man sich mit den üblichen Befehlen bewegen. Drücken von ENTER bewirkt, dass der Cursor im Hauptfenster in die korrespondierende Zeile springt.

Alternativ kann das Kommando g:/ verwendet werden. Beispiel:

:g/^.* = text

Die Möglichkeiten sind gegenüber vimgrep aber eingeschränkt.

10. Nützliche Kommandos: Übersicht

-- Bearbeitung der persönlichen Konfigurationsdatei _vimrc (Linux: .vimrc)
:e $MYVIMRC

-- Steuerung der Case-sensitivity

:se ignorecase " keine Berücksichtigung
:se noignorecase " Berücksichtigung

-- Eingabe von Zeichen über Unicode-Hexcode

ctrl-q + u + [vierstellige Hex-Zahl] (Hex-Codes: https://www.fileformat.info/)

-- Anzeigen des Codepoints
ga   # "get ascii" - Zeigt den Unicode-Zahlenwert des Zeichens unter dem Cursor

-- Löschen von Zeilen mit Suchmuster

:g/regex/d

Beispiel
:g/^listing.csv/d   # löscht alle Zeilen, die mit dem String "listing.csv" beginnen
:g!/^listing.csv/d  # löscht alle Zeilen, die NICHT mit dem String "listing.csv" beginnen

-- Wechsel in den Visuellen Modus (Markierung von Textpassagen)
:shift+v (Bewegungs- oder Suchkommandos definieren Textauswahl)

-- Anzeigen von Umgebungsvariablen
:echo $ + ctrl-d

11. Hilfe

Vim verfügt über eine eingebaute Hilfefunktion. Diese ist sehr umfangreich und dadurch meistens eigentlich eher unbrauchbar. Der Aufruf erfolgt durch

:he [Stichwort] # (z.B. :he fileencoding)

Das [Stichwort] kann auch weggelassen werden. Dann wird die Startseite der eingebauten Dokumentation geöffnet.

:he

Die Hilfeseiten enthalten Hyperlinks, die daran erkennbar sind, dass die damit hinterlegten Stichwörter links und rechts von einem senkrechten Strich (sog. "Pipe") begrenzt sind. Ein Doppelklick auf die Stichwörter führt zu den entsprechenden Seiten innerhalb des Hilfekompendiums.

Die eingebaute Hilfe wird verlassen durch

 :q ("quit")

Häufig führt eine Google-Suche am schnellsten zu einer gesuchten Lösung.

# Nützliche Seiten



12. Datei _viminfo

_viminfo (unter Linux: .viminfo): Datei im Homeverzeichnis (unter Windows normalerweise: c:\Benutzer\[Anmeldename]; unter Unix/Linux: /home/users/[Anmeldename]), in der sämtliche Kommandos (u.a. Befehle und Suchmuster) aufgezeichnet werden. Die Kommandos einer laufenden Bearbeitung werden erst in die Datei geschrieben, wenn die Bearbeitung einer Datei durch das Schließen des entsprechenden Fensters beendet wird.

13. Appendix: Historie von Vim

Die Anfänge von vim reichen in das Jahr 1976 zurück. Bis dahin wurden Texte auf Unix-Systemen überwiegend mit dem Editor ed bearbeitet, der stets nur eine einzige Zeile eines Textes auf dem Bildschirm anzeigte. Erst vi, der Vorläufer von vim, der ab 1976 von Bill Joy entwickelt wurde, führte die Möglichkeit ein, größere Passagen eines Textes auf dem Bildschirm darzustellen (vi = visual). Vim wurde dann von Bram Moolenaar als eine Weiterentwicklung des bis dahin nur auf Unix-Computern verfügbaren vi (vim = Vi IMproved, also "verbessertes" vi) ab Ende der 1980er Jahre zunächst für den Computer Amiga entwickelt. Die erste allgemein verfügbare Version von Vim erschien dann 1991, zunächst nur für den Amiga. Seither wurde das Programm stetig weiterentwickelt und steht nunmehr für die wichtigsten Betriebssysteme (Unix/Linux, Windows, Mac OS X) zur Verfügung.

Vim wurde zunächst nur innerhalb der sog. "Shell" verwendet. Die Shell ist ein auf nahezu allen Betriebssystemen vorhandenes Programm, das die Steuerung des Computers durch die Eingabe von Befehlen erlaubt. Mit dem Entstehen des Fensterkonzepts (zunächst Apple, dann Windows) wurde auch eine Fenster-Version von Vim entwickelt. Diese wird als gVim ("graphical Vim") bezeichnet.

Vim ist kostenfrei (eigentlich "charity ware"; es wird um Spenden für soziale Projekte gebeten) und open source-Software. Die jeweils aktuelle Version kann von www.vim.org heruntergeladen werden.

 

Schreibe einen Kommentar