[[Vorlage(Getestet,bionic)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(3)]] [[Bild(./vim.png, 48, align=left)]] [[Bild(./startup.png, 300, align=right)]] [[Bild(./vim-in-action.png, 300, align=right)]] Viele Benutzer schrecken vor dem sehr praktischen Editor [https://www.vim.org/ VIM] {en} wegen seiner etwas sperrigen Bedienung zurück. Wer sich aber erst einmal mit den verschiedenen Betriebsmodi vertraut gemacht hat, mag auf die hilfreichen Dienste des schlanken, aber fast beliebig erweiterbaren Editors nicht mehr verzichten. VIM ist eine Weiterentwicklung des Texteditors Vi, deshalb auch der Name als Abkürzung für "'''V'''i '''IM'''proved". Es gibt [:Editoren:], die anfangs wesentlich leichter zu bedienen sind, z.B. Pico oder [:Nano:]. Jedoch hat VIM einige Vorteile: * Auf jedem POSIX-konformen System ist mindestens der Vorfahr des VIM, der Vi, als Editor vorhanden (wobei Vi sehr viel weniger Funktionen hat) * Navigierbar ohne Cursor-Tasten (kann bei Tastaturproblemen in Remote-Sessions helfen) * Superschnelle Bedienbarkeit * Browsen durch Verzeichnisse * Fast beliebig erweiterbar und konfigurierbar (Einstellungen, Macros, Mappings, Plugins ...) Es stehen auch grafische Oberflächen zur Verfügung: * GVim ('''g'''raphical '''vim''', graphische Oberfläche) - benutzt [:GTK:GTK+] * [github:chrizel/Yzis:Yzis] - ein VIM-ähnlicher Editor, der zur "vi engine" eine grafische [:Qt:]-Oberfläche und eine [wikipedia:ncurses:]-Textoberfläche bereitstellt. Man sollte sich nicht von der anfangs kompliziert erscheinenden Bedienung abschrecken lassen. Mit wenigen Befehlen kommt man schon gut klar, z.B. `i`, [[Vorlage(Tasten, esc)]], `:w`, `:wq`, `:q!` und `dd`. Näheres unter [#Bewegungen Bewegungen], [#Wechseln-des-Modus Wechseln des Modus] und [#Speichern-und-Beenden Speichern und Beenden]. = Installation = Standardmäßig ist eine abgespeckte VIM-Version installiert ('''vim-tiny'''), die über wesentlich weniger Funktionen verfügt als das Original (z.B. kein Verzeichnisbrowser). Will man ernsthaft mit VIM arbeiten, sollte das folgende Paket installiert werden [1]: {{{#!vorlage Paketinstallation vim }}} Optional kann man VIM jetzt noch als systemweiten Standard-Editor einstellen (s. [:Alternativen-System:]): {{{#!vorlage Befehl sudo update-alternatives --config editor }}} {{{Es gibt 4 Auswahlmöglichkeiten für die Alternative editor (welche /usr/bin/editor bereitstellen). Auswahl Pfad Priorität Status ------------------------------------------------------------ 0 /bin/nano 40 automatischer Modus 1 /bin/ed -100 manueller Modus 2 /bin/nano 40 manueller Modus * 3 /usr/bin/vim.basic 30 manueller Modus 4 /usr/bin/vim.tiny 15 manueller Modus Drücken Sie die Eingabetaste, um die aktuelle Wahl[*] beizubehalten, oder geben Sie die Auswahlnummer ein: 3 }}} Beim Aufruf von Befehlen wie z.B. "visudo" oder "crontab -e" wird jetzt der neu installierte VIM als Editor verwendet. = Start = {{{#!vorlage Hinweis Der Befehl `vi` ruft nicht mehr den alten Vi, sondern VIM auf. }}} Starten lässt sich der Editor im Terminal[2] mit {{{#!vorlage Befehl vim }}} oder {{{#!vorlage Befehl vim DATEI }}} Letzterer Befehl öffnet die Datei '''DATEI''' im aktuellen Verzeichnis in einen neuen Buffer. Existiert die Datei nicht, wird sie beim Speichern angelegt. Es empfiehlt sich, das VIM-Tutorial durchzuarbeiten. Man startet es mit dem Befehl: {{{#!vorlage Befehl vimtutor }}} Es existieren auch übersetzte Versionen, die beim Starten des Tutorials mit dem zwei-Buchstaben-Ländercode aufgerufen werden können, zum Beispiel: * Deutsch: {{{#!vorlage Befehl vimtutor de }}} * Englisch: {{{#!vorlage Befehl vimtutor en }}} {{{#!vorlage Hinweis Der Befehl `vimtutor` funktioniert nicht mit '''vim-tiny''', siehe [#Installation Installation]. }}} = VIM-Modi = VIM arbeitet nicht so sehr mit Tastenkombinationen (wie zum Beispiel [:Emacs:]), sondern verwendet verschiedene Modi, zwischen denen man wechselt und die verschiedene Funktionen anbieten. Es ist zwischen 6 Basis-Modi (basic modes) und 6 zusätzlichen Modi (additional modes) als von Ersteren "abgeleitete" Varianten zu unterscheiden. In diesem Artikel wird lediglich auf die vier gebräuchlichsten Basis-Modi eingegangen (und drei zusätzliche Modi ohne spezielle Erwähnung eingegliedert). Dokumentation der Modi unter `:help Normal-mode` == Normalmodus == Standardmäßig startet VIM in diesem Modus. Hier kann man im Text navigieren, den Text anpassen und über bestimmte Tastenkürzel in andere Modi wechseln. In diesem Modus kann man jedoch keinen Text eingeben. Mit [[Vorlage(Tasten, esc)]] wechselt man von anderen Modi in diesen Modus. Die von vielen Befehlen unterstützte Angabe einer Anzahl besagt, wie oft der Befehl ausgeführt werden soll. Diese Angabe wird vor den Befehl gesetzt, z.B. bewegt `42w` den Cursor 42 Wörter weiter oder `4dd` löscht vier Zeilen. === Bewegungen === {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Bewegungsbefehle +++ Befehl Beschreibung Befehl Beschreibung +++ `h` Bewegt Cursor ein Zeichen nach links. `l` Bewegt Cursor ein Zeichen nach rechts. +++ `j` Bewegt Cursor eine Zeile nach unten. `k` Bewegt Cursor eine Zeile nach oben. +++ `w` Bewegt Cursor ein Wort vorwärts. `b` Bewegt Cursor ein Wort rückwärts. +++ `$` Bewegt Cursor ans Zeilenende. `0` Bewegt Cursor an den Zeilenbeginn. +++ `gg` Bewegt Cursor zur ersten Zeile. `G` Bewegt Cursor zur letzten Zeile. +++ `NG` Bewegt Cursor zu Zeile `N`. `:N` (Kommandozeilenmodus) Wie `NG`. +++ `%` Bewegt Cursor zu zugehörigen Zeichen unter dem Cursor. Beispielsweise kann so der Cursor von öffnender zu schließender Klammer (und umgekehrt) bewegt werden. Siehe auch `:set matchpairs`. }}} Man kann auch die Pfeiltasten auf der Tastatur verwenden. Dokumentation unter `:help left-right-motions` und den nachfolgenden Abschnitten. ==== Markierungen ==== Markierungen helfen innerhalb eines Buffers und auch über mehrere (nicht zwingend geöffneten) Stellen in Dokumenten zu springen. {{{#!vorlage Tabelle <-2 tableclass="zebra_start3"tablestyle="width: 100%"; rowclass="titel"> Markierungen +++ Befehl Beschreibung +++ `mX` Markierung namens `X` an aktueller Cursorposition setzen. +++ `'X` Zu Markierung namens `X` wechseln. +++ `'0` Öffne zuletzt geöffnete Datei an zuletzt besuchter Stelle. `0` kann durch `1 - 9` ersetzt werden, um eines der 10 zuletzt geöffneten Dokumente zu öffnen. +++ `\`\`` (zwei Backticks) Bewegt Cursor zu der (exakten) Stelle vor der letzten (Zeilensprung-)Bewegung. }}} Wird beim Setzen der Markierung ein Kleinbuchstabe verwendet, ist die Markierung lokal (buffer-/dateibezogen). Ist die Markierung ein Großbuchstabe, kann auf die Markierung von allen Buffern aus zugegriffen werden, d.h. sie ist global. Dokumentation unter `:help mark-motions` === Wechseln des Modus === {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Befehle zum Wechseln in den Eingabemodus +++ Befehl Beschreibung Befehl Beschreibung +++ `i` Wechselt in den Eingabemodus links vom Cursor. `I` Wechselt in den Eingabemodus am Anfang der Zeile oder bei aktiviertem `autoindent` an den Anfang der Einrückung. +++ `a` Wechselt in den Eingabemodus rechts vom Cursor. `A` Wechselt in den Eingabemodus am Ende der Zeile. +++ `o` Erstellt neue Zeile unterhalb der Aktuellen und wechselt in den Eingabemodus. Wenn `autoindent` aktiviert ist, wird die Einrückung automatisch vorgenommen. `O` Erstellt neue Zeile oberhalb der Aktuellen und wechselt in den Eingabemodus. Wenn `autoindent` aktiviert ist, wird die Einrückung automatisch vorgenommen. +++ `r` Wechselt für ein Zeichen in den Ersetzungsmodus (Art des Eingabemodus, bei dem Zeichen überschrieben werden anstatt einzufügen). Wird beispielsweise `rX` eingegeben, wird das Zeichen unter dem Cursor mit dem Buchstaben `X` ersetzt. `R` Wechselt in den Ersetzungsmodus. +++ `s` Wechselt in den Eingabemodus und entfernt/ersetzt dabei das Zeichen unter dem Cursor. Wird beispielsweise `sFOOBAR` eingegeben, wird das Zeichen unter dem Cursor mit `FOOBAR` ersetzt, man bleibt weiterhin im Eingabemodus. `S` Wechselt in den Eingabemodus und entfernt/ersetzt dabei die gesamte aktuelle Zeile. +++ `cw` Wechselt in den Eingabemodus und entfernt/ersetzt dabei das gesamte Wort ab und unter dem Cursor. `cc` Wie `S`. }}} Dokumentation unter `:help inserting` und `:help delete-insert` {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Befehle zum Wechseln in den Visuellen Modus +++ Befehl Beschreibung Befehl Beschreibung +++ `v` Wechselt in den [#Visueller-Modus Visuellen Modus]. Bewegungen zur Auswahl der Markierung werden zeichenweise vorgenommen. `V` Wechselt in den [#Visueller-Modus Visuellen Modus]. Bewegungen zur Auswahl der Markierung werden zeilenweise vorgenommen. }}} Dokumentation unter `:help visual-start` {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Befehle zum Wechseln in den Kommandozeilenmodus +++ Befehl Beschreibung +++ `:`[[BR]]`/`[[BR]]`?`[[BR]]`!` Wechseln in den Kommandozeilenmodus, um Befehle aufzurufen, z.B. `:help`, oder um zu suchen, z.B. `/SUCHMUSTER` bzw. `?SUCHMUSTER` oder Filterbefehle auszuführen, z.B. `!sort` }}} Dokumentation unter `:help Cmdline-mode` und unter den folgenden Abschnitten. === Löschen / Ausschneiden / Kopieren / Einfügen === Vim bietet mehrere [wikipedia:Zwischenablage:Zwischenablagen], genannt ''Register''. Auf diese Weise, können z.B. verschiedene Textstellen unabhängig voneinander kopiert und abgerufen werden. Ein Register wird einer Taste zugeordnet und dann mit Befehlen wie beispielsweise ''Einfügen'' kombiniert. {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Lösch- / Ausschneidbefehle +++ Befehl Beschreibung +++ `x` Löscht das Zeichen unter dem Cursor. +++ `dd` Entfernt aktuelle Zeile. +++ `d$` Entfernt in der aktuellen Zeile bis zum Zeilenende. +++ `d0` Entfernt in der aktuellen Zeile vom Zeilenanfang bis zur Cursorposition. }}} {{{#!vorlage Hinweis Der durch Löschbefehle entfernte Inhalt wird automatisch im Standardregister (`"`) und nummerierten Registern `1` zwischengespeichert. Zusätzlich rotiert der Inhalt der nummerierten Register `1 - 9`, sodass man immer auf den Inhalt der letzten 9 Löschaktionen zugreifen kann. Dokumentation der Register unter `:help registers` }}} Dokumentation unter `:help deleting` {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Kopieren +++ Befehl Beschreibung Befehl Beschreibung +++ `yy` <-3> Kopiert aktuelle Zeile. +++ `yw` Kopiert Wort(teil) rechts vom Cursor. `yb` Kopiert Wort(teil) links vom Cursor. +++ `"XyPLATZHALTER` <-3> Kopiert den Ausschnitt, der nach dem Befehl `yPLATZHALTER` (z.B. `yy`) bestimmt wurde, in das Register `X`. Es stehen die Register `a-z` und `A-Z` zur freien Verfügung. Siehe dazu `:help registers`. }}} Sofern nicht explizit mit `"X` angegeben, wird immer in das Standardregister (`"`) und in das nummerierte Register `0` kopiert. Dokumentation unter `:help copy-move` {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Einfügen +++ Befehl Beschreibung Befehl Beschreibung +++ `p` Text aus dem Standardregister nach der Cursorposition einfügen. `P` Text aus dem Standardregister vor der Cursorposition einfügen. +++ `"Xp` Text aus dem Register `X` nach der Cursorposition einfügen. `"XP` Text aus dem Register `X` vor der Cursorposition einfügen. }}} Die Belegung aller Register kann mit `:registers` angezeigt werden. Dokumentation unter `:help copy-move` === Rückgängig / Wiederherstellen === {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Änderungen rückgängig machen oder wiederherstellen +++ Befehl Beschreibung +++ `u` Macht den jeweils letzten Befehl rückgängig (mehrstufig möglich). +++ `^R`[[BR]]`:redo` (Kommandozeilenmodus) Wiederholt den zuletzt rückgängig gemachten Befehl, `^` steht hier genauso wie in der VIM-Dokumentation für [[Vorlage (Tasten, "strg")]]. +++ `U` Stellt die aktuelle Zeile wieder her. }}} Dokumentation unter `:help undo-commands` === Aktionen / Befehle wiederholen === {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Aktionen und Befehle wiederholen +++ Befehl Beschreibung +++ `.` (Punkt) Wiederholt den letzten Einfüge- bzw. Löschbefehl. +++ `@:` Wiederholt den letzten Kommandozeilenmodus-Befehl. }}} Dokumentation unter `:help single-repeat` === Macros === Macros sind aufgezeichnete Tastenanschläge (Bewegungen, Aktionen wie z.B. Löschen oder Einfügen), die beliebig oft wiederholt werden können. Dies ist besonders praktisch, wenn in strukturierten Dokumenten wie Listen immer wieder die gleiche Änderung angewandt werden soll. Man würde beispielsweise die Aufnahme starten, am Anfang der aktuellen Zeile etwas löschen- den Cursor zum Anfang der nächsten Zeile bewegen und die Aufnahme beenden. Nun könnte dieses Muster 20 mal oder auch bis zum Ende der Liste wiederholt werden. Es können veschiedene Macros gespeichert werden. Folgende Tastenkürzel sind im Normalmodus einzugeben: {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Macros +++ Befehl Beschreibung +++ `qX` Aufnahme starten und diesem Macro die Taste X zuordnen +++ `q` Aufnahme beenden +++ `@X` Das Macro X einmalig ausführen +++ `100@X` Das Macro X 100 mal ausführen }}} Möchte man das Macro bis zum Ende des Dokuments anwenden, gibt man einfach eine übertriebene Zahl wie 1000 an. Vim stoppt, sobald das Ende erreicht wurde. [[Bild(./help-folds.png, 200, align=right)]] === Folding === Als "Folding" wird das Einklappen von Textpassagen bezeichnet, sodass diese nur noch eine Zeile einnehmen. Somit können momentan nicht interessante Stellen ausgeblendet werden, um die Lesbarkeit zu verbessern oder um Sprünge zu vermeiden. Je nach eingestellter Methode können die Folds manuell erstellt werden. Dokumentation unter `:help foldmethod` {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Folding +++ Befehl Beschreibung Befehl Beschreibung +++ `zf` Fold über ausgewählten Bereich erstellen (funktioniert nicht mit allen Fold-Methoden). Befindet man sich im [#Visueller-Modus Visuellen Modus] wird der markierte (Zeilen-)Bereich als Fold erstellt, ansonsten muss nach `zf` noch eine [#Bewegungen Bewegung] folgen. `zd` Fold unter Cursor löschen (funktioniert nicht mit allen Fold-Methoden). +++ `zo` Fold unter Cursor öffnen. `zR` Alle Folds öffnen. +++ `zc` Fold unter Cursor schließen. `zM` Alle Folds schließen. +++ `zE` Alle Folds löschen (funktioniert nicht mit allen Fold-Methoden). }}} Mit der Option `foldlevel` kann das präferierte Level von ein- und ausgeklappten Folds eingestellt werden, beispielsweise `set foldlevel=1`. Mit `zX` können dann alle Folds darauf ausgerichtet werden. Um am Rand zu sehen, ob Folds existieren und wo sich diese befinden, kann `foldcolumn` auf einen Wert größer `0` , also z.B. `set foldcolumn=2` gesetzt werden. Dokumentation unter `:help folding` und den folgenden Abschnitten. == Eingabemodus == In diesem Modus kann Text "normal" eingegeben werden. Er gleicht somit dem Verhalten der meisten anderen Editoren. Befehle können nur mit Tastenkombinationen und den Meta-Tasten ausgeführt werden, z.B. [[Vorlage (Tasten, "strg")]] oder [[Vorlage (Tasten, "alt"]]. Dokumentation unter `:help Insert-mode` Für den Wechsel vom Normalmodus in den Eingabemodus hilft die Tabelle bei [#Wechseln-des-Modus Wechseln des Modus]. In den Normalmodus wechselt man mit [[Vorlage (Tasten, "esc")]]. == Visueller Modus == In diesem Modus können Textpassagen ausgewählt werden. Die ausgewählten Bereiche können dann mit fast denselben Befehlen wie im Normalmodus bearbeitet werden. Dokumentation unter `:help Visual-mode` Für den Wechsel vom Normalmodus in den Visuellen Modus hilft die Tabelle bei [#Wechseln-des-Modus Wechseln des Modus]. In den Normalmodus wechselt man mit [[Vorlage (Tasten, "esc")]] bzw. nach durchgeführter Aktion. == Kommandozeilenmodus == In diesem Modus können Befehle ausgeführt oder im Buffer mit [wikipedia:Regulärer_Ausdruck:regulären Ausdrücken] gesucht werden. Mit dem Filterbefehl `!` kann man externe Programme ausführen, die den gesamten Text oder auch nur Teile verändern, z.B. [:sort:]. Dokumentation unter `:help Cmdline-mode` Zum Wechsel vom Normalmodus in den Kommandozeilenmodus, siehe [#Wechseln-des-Modus Wechseln des Modus]. Um den Befehl abzubrechen, also den Modus zu wechseln, kann z.B. mit [[Vorlage (Tasten, "esc")]] in den Normalmodus gewechselt werden. {{{#!vorlage Hinweis Bei allen folgenden Befehlen wird als Ausgangsmodus der Normalmodus genommen und der Wechselbefehl in den Kommandozeilenmodus (`:`, `/`, `?` oder `!`) mit angegeben. }}} === Speichern und Beenden === {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Speichern und Beenden +++ Befehl Beschreibung Befehl Beschreibung +++ `:q` Schließt das aktuelle Fenster. Falls dies das letzte Fenster ist und irgendein Buffer noch nicht gespeichert wurde, wird (je nicht gespeichertem Buffer) eine Rückfrage gestellt, ob die Änderungen verworfen werden sollen. `:q!` Schließt das aktuelle Fenster. Falls dies das letzte Fenster ist und irgendein Buffer noch nicht gespeichert wurde, werden nicht gespeicherte Änderungen verworfen. +++ `:wq` Speichert den aktuellen Buffer und schließt das Fenster. Falls dies das letzte Fenster ist und irgendein Buffer noch nicht gespeichert wurde, wird (je nicht gespeichertem Buffer) eine Rückfrage gestellt, ob die Änderungen verworfen werden sollen. `:wn` Speichert den aktuellen Buffer und wechselt zum nächsten Buffer. +++ `:qall` Schließt VIM. Falls Buffer noch nicht gespeichert wurden, wird (je nicht gespeichertem Buffer) eine Rückfrage gestellt, ob die Änderungen verworfen werden sollen. `:qall!` Schließt VIM. Änderungen an noch nicht gespeicherten Buffern werden ohne Rückfrage verworfen. +++ `:x` Wie `:wq`. }}} Dokumentation unter `:help write-quit` und `:help window-exit` === Suchen und Ersetzen === VIM verwendet [wikipedia:Regulärer_Ausdruck:reguläre Ausdrücke] zum Suchen und Ersetzen, weitere Informationen [wikipedia_en:Regular expression:hier]. {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Suchen +++ Befehl Beschreibung Befehl Beschreibung +++ `/SUCHMUSTER` Sucht nach dem Suchmuster `SUCHMUSTER` ab der Cursorposition vorwärts. `/` Wiederholt die letzte Suche vorwärts. +++ `?SUCHMUSTER` Sucht nach dem Suchmuster `SUCHMUSTER` ab der Cursorposition rückwärts. `?` Wiederholt die letzte Suche rückwärts. +++ `n` (Normalmodus) Wiederholt den letzten Suchbefehl. `/SUCHMUSTER\c` Sucht nach dem Suchmuster `SUCHMUSTER` ab der Cursorposition vorwärts, wobei die Groß- und Kleinschreibung nicht berücksichtigt wird. }}} {{{#!vorlage Experten Um eine komplexe Suche durchzuführen, erstellt man den Suchausdruck am einfachsten innerhalb eines neuen Buffers. Dazu öffnet man ein Kommandozeilenfenster mit `q/` aus dem Normalmodus und kann nun mit allen Registern und Editorbefehlen und Zugriff auf alte Suchausdrücke den neuen Suchausdruck erstellen (allerdings ohne die Möglichkeit, das Fenster zu wechseln). Mit [[Vorlage(Tasten, "Enter")]] wird der Suchausdruck unter dem Cursor ausgeführt, mit [[Vorlage(Tasten, "strg+c")]] kann in den normalen Kommandozeilenmodus, mit `:q` direkt in den Normalmodus gewechselt werden. Analog kann auch `q:` und `q?` für entsprechende `:` oder `?` Befehle verwendet werden. }}} Dokumentation unter `:help search-commands` {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Suchen und Ersetzen +++ Befehl Beschreibung Befehl Beschreibung +++ `:s/ALT/NEU` Sucht und ersetzt in der aktuellen Zeile `ALT` durch `NEU` (das erste Vorkommen). `:s/ALT/NEU/g` Sucht und ersetzt in der aktuellen Zeile `ALT` durch `NEU` (alle Vorkommen). +++ `:s/ALT/NEU/c` Sucht und ersetzt (nach Rückfrage) in der aktuellen Zeile `ALT` durch `NEU` (das erste Vorkommen). `:s/ALT/NEU/gc` Sucht und ersetzt (nach Rückfrage) in der aktuellen Zeile `ALT` durch `NEU` (alle Vorkommen). +++ `:%s/ALT/NEU` Sucht und ersetzt im gesamten Dokument `ALT` durch `NEU` (das erste Vorkommen pro Zeile). `:%s/ALT/NEU/g` Sucht und ersetzt im gesamten Dokument `ALT` durch `NEU` (alle Vorkommen pro Zeile). +++ `:%s/ALT/NEU/c` Sucht und ersetzt (jeweils nach Rückfrage) im gesamten Dokument `ALT` durch `NEU` (das erste Vorkommen pro Zeile). `:%s/ALT/NEU/gc` Sucht und ersetzt (jeweils nach Rückfrage) im gesamten Dokument `ALT` durch `NEU` (alle Vorkommen pro Zeile). +++ `:1,99s/ALT/NEU` Sucht und ersetzt von Zeile 1 bis Zeile 99 `ALT` durch `NEU` (das erste Vorkommen pro Zeile). `:8,$s/ALT/NEU` Sucht und ersetzt von Zeile 8 bis zur letzten Zeile `ALT` durch `NEU` (das erste Vorkommen pro Zeile). }}} Dokumentation unter `:help :substitute` [[Bild(./help-tab-sp-windows.png, 200, align=right)]] === Umgang mit Buffern === Buffer sind die Orte, wohin VIM Dokumente lädt. Nicht alle Buffer müssen im Fenster sichtbar, sondern können im Hintergrund geöffnet sein, in einem geteilten Fenster oder anderen Tab. {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Buffer öffnen und schließen +++ Befehl Beschreibung Befehl Beschreibung +++ `:buffers` Zeigt alle offenen Buffer mit Nummern an. `:bN` Wechselt in aktuellem Fenster zu Buffer `N`. +++ `:e DATEI` Lädt Datei `DATEI` in den Buffer (nach). `:bdelete N` Schließt Buffer `N`. Sind noch nicht gespeicherte Änderungen vorhanden, kommt eine Rückfrage. Ist dies der letzte offene Buffer, wird anschließend ein neuer leerer Buffer geöffnet. +++ `:new DATEI` Öffnet Datei `DATEI` in horizontal geteiltem Fenster. `:vnew DATEI` Öffnet Datei `DATEI` in vertikal geteiltem Fenster. +++ `:split` Öffnet aktuell angezeigten Buffer parallel in horizontal geteiltem Fenster. `:vsplit` Öffnet aktuell angezeigten Buffer parallel in vertikal geteiltem Fenster. +++ `:tabs` Zeigt aktuell geöffnete Tabs an. `:tabnew DATEI` Öffnet Datei `DATEI` in neuem Tab. }}} Dokumentation unter `:help edit-a-file`, `:help opening-window` und `:help buffer-hidden` ==== Fenster- und Tabbewegungen ==== {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Fenster- und Tabbewegungen +++ Befehl Beschreibung Befehl Beschreibung +++ `^wm` (Normalmodus) Wechselt zum Fenster mit dem Bewegungsbefehl `m`, das für `h`, `j`, `k` oder `l` steht, siehe [#Bewegungen Bewegungen]. `^wM` (Normalmodus) Verschiebt das Fenster mit dem Bewegungsbefehl `M`, das für `H`, `J`, `K` oder `L` steht, siehe [#Bewegungen Bewegungen]. +++ `:tabnext` Wechselt zu nächstem Tab. `:tabprevious` Wechselt zu vorherigem Tab. }}} `^` steht wie in der VIM-Dokumentation für [[Vorlage (Tasten, "strg")]]. Dokumentation unter `:help ^w` und `:help tab-page-commands` === Optionen setzen === Optionen werden mit `:set` gesetzt, bzw. `:let` für Variable in VIM-Skripten wie Plugins usw. {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Optionen setzen +++ Befehl Beschreibung Befehl Beschreibung +++ `:set all` Listet alle möglichen (nativen) Optionen auf. `:set OPTION?` Zeige Wert von `OPTION`. Analog für `let`. +++ `:set OPTION` Aktiviert `OPTION`. Dabei ist `OPTION` eine Einstellung, die man entweder ein- oder ausschalten kann. `:set noOPTION` Deaktiviert `OPTION`. Dabei ist `OPTION` eine Einstellung, die man entweder ein- oder ausschalten kann. +++ `:set OPTION=WERT` Setzt den Wert `WERT` für die Option `OPTION`. Analog für `let`. `:set OPTION&` Setzt den Wert der Option `OPTION` auf den Standardwert. }}} Dokumentation unter `:help set-option` = Konfiguration = VIM sucht beim Programmstart nach einer Konfigurationsdatei – standardmäßig ist das die versteckte Datei '''~/.vimrc''' im [:Homeverzeichnis:]. Eine Vorlage findet man unter '''/etc/vim/vimrc'''. Die VIM-Konfigurationsdatei bietet z.B. Platz für persönliche Einstellungen wie Farbschemas, Optionen für bestimmte Dateitypen, Plugin-Optionen, Tastaturbelegungen, automatisch ausgeführte Befehle beim Öffnen/Schreiben/... und nicht zuletzt die nativen VIM-Optionen. Befehle/Optionen werden wie im Kommandozeilenmodus eingegeben, nur ohne führenden Doppelpunkt (Konvention). Eine reduzierte Auswahl an Optionen sei hier aufgelistet. Eine vollständige Liste aller nativen Optionen kann mit `:set all` angezeigt werden, bzw. `:set` für alle vom Standard veränderten Werte. {{{#!vorlage Tabelle <-4 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Optionen +++ Option Beschreibung Option Beschreibung +++ `:set number` Zeilennummern anzeigen. `:set nonumber` Zeilennummern nicht anzeigen. +++ `:set list` Sonderzeichen anzeigen, siehe `:help listchars`. `:set nolist` Sonderzeichen ausblenden. +++ `:syntax on` Syntaxhighlighting aktivieren (gegenwärtige Farbeinstellungen zur Hervorhebung werden nicht berücksichtigt). `:syntax off` Syntaxhighlighting deaktivieren. +++ `:set compatible` VIM kompatibler zu Vi einstellen. Mit dieser Option sind einige Befehle und Optionen nicht mehr verfügbar. `:set nocompatible` VIM ohne Rücksicht auf Kompatibilität zu Vi einstellen (empfohlen). +++ `:set mouse=a` Stellt Mausunterstützung in allen Modi bereit. `:set mouse=` Deaktiviert Mausunterstützung. +++ `:set autoindent` Rückt Text automatisch ein. `:set noautoindent` Rückt Text nicht automatisch ein. +++ `:set ignorecase` Ignoriert beim Suchen standardmäßig Groß- und Kleinschreibung. `:set noignorecase` Beachtet beim Suchen standardmäßig Groß- und Kleinschreibung. +++ `:set incsearch` Während der Suche zum entsprechenden Text springen. `:set noincsearch` Während der Suche nicht zum entsprechenden Text springen. +++ `:set hlsearch` Suchergebnisse farbig hervorheben. Temporär (bis zur nächsten Suche) deaktivieren mit: `:nohls` `:set nohlsearch` Suchergebnisse nicht farbig hervorheben. +++ `:set showmode` In der Statusleiste anzeigen, ob der Normalmodus oder der Einfügemodus gerade aktiv ist. `:set noshowmode` Die Anzeige des gerade aktiven Modus wieder unterdrücken. }}} {{{#!vorlage Hinweis Die meisten Optionen haben eine Kurzform. Beispielsweise kann `number` auch als `nu[mber]`, `num`, `numb`, `numbe` oder `number` angegeben werden. Welche Bezeichnungen jeweils möglich sind, ist der Hilfe zu entnehmen. Ob eine Option bereits standardmäßig aktiviert wurde, ist auch in der Dokumentation ersichtlich. Kommentare werden mit einem doppelten Anführungszeichen eingeleitet: `"` }}} Dokumentation unter `:help nu` = Farbschemas = Mit der Einstellung `syntax on` wird Programmcode farbig hervorgehoben. Diese Farbkombinationen stehen in colorscheme-Definitionsdateien und befinden sich systemweit unter '''/usr/share/vim/vim71/colors'''. Wenn man ein eigenes Schema schreiben will, ist eine Anleitung mit Tipps in der Datei '''README.txt''' enthalten. Ein automatisch generierter Vergleich aller Farbschemas von [https://www.vim.org/scripts/index.php vim.org] {en} findet sich unter [googlecode:vimcolorschemetest:] {en}. Um ein Farbschema in VIM auszuwählen, gibt man entweder den Befehl `:colorscheme NAME_DES_SCHEMAS` ein (Schema temporär anpassen) oder fügt der '''~.vimrc''' folgenden Inhalt hinzu (persistente Änderung): {{{#!code vim syntax on colorscheme NAME_DES_SCHEMAS }}} Der Name des Schemas muss dabei ohne die Endung '''.vim''' angegeben werden. == Unterschiedliche Darstellung in VIM/GVim == Farbschemas werden in VIM und GVim anders dargestellt. Das liegt daran, dass das Terminal nur bis zu 256 Farben darstellen kann, GVim aber alle, die vom System bereitgestellt werden. Um für VIM und GVim unterschiedliche Schemas zu verwenden, kann man Folgendes in die eigene '''.vimrc''' schreiben: {{{#!code vim if has('gui_running') colorscheme NAME_DES_GVIM_SCHEMAS else colorscheme NAME_DES_VIM_SCHEMAS endif }}} = Dateibrowser = Ein großer Vorteil von VIM ist, dass man damit auch durch Verzeichnisse browsen kann. {{{#!vorlage Befehl vim VERZEICHNIS }}} Es wird der Inhalt des Verzeichnisses VERZEICHNIS angezeigt. Zum Navigieren benutzt man dieselben Tasten wie im Normalmodus, in der Regel also die Cursor-Tasten. Durch Drücken von [[Vorlage(Tasten, "Enter")]] (Eingabetaste) wird je nach aktueller Zeile entweder in das entsprechende Unterverzeichnis gewechselt, oder die Datei geöffnet. {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" tablestyle="width: 100%"; rowclass="titel"> Optionen für aktuell ausgewählte Datei/Verzeichnis +++ Option Beschreibung +++ `Eingabetaste` Wechselt in das Unterverzeichnis oder öffnet die Datei +++ `-` Wechselt in die nächsthöhere Verzeichnisebene +++ `v` Öffnet die Datei parallel in vertikal geteiltem Fenster (Cursor wechselt zu neuem Fenster) +++ `p` Zeigt die Datei parallel in horizontal geteiltem Fenster an (Cursor bleibt im Fenster des Dateibrowsers) +++ `%` Datei im aktuell angezeigten Verzeichnis erstellen +++ `d` Unterverzeichnis im aktuell angezeigten Verzeichnis erstellen +++ `R` Datei/Verzeichnis umbenennen +++ `D` Datei/Verzeichnis löschen +++ `i` Wechselt den Anzeigemodus (ähnlich dem "ls"-Kommando) +++ `s` Wechselt die Sortierung (Dateiname, Datum, Größe, Namenserweiterung) }}} Bei den geteilten Fenstern ist wie bereits weiter oben beschrieben zu beachten, dass mit "^w ^w" zwischen den Fenstern gewechselt werden kann, und mit ":q" das aktuelle Fenster geschlossen wird. Hat man durch Drücken von [[Vorlage(Tasten, "Enter")]] (Eingabetaste) eine Datei geöffnet, kann man durch ":Re" wieder zurück in den Dateibrowser springen (nicht vergessen die Datei ggf. vorher zu speichern). = Erweiterungen = [[Vorlage(Bildunterschrift, ./extensions.png, 300, "Stark konfiguriertes VIM", right)]] Für VIM existieren eine Vielzahl von Erweiterungen. Es gibt Plugins mit neuen oder verbesserten Funktionen, Syntaxschemas, dateitypspezifische Plugins usw. Diese VIM-Skripte werden in Ordnern unterhalb von '''~/.vim/''' (bzw. nach der [:Umgebungsvariable:] `VIMRUNTIME`) abgelegt. VIM lädt beim Start automatisch alle Plugins usw. aus diesen Verzeichnissen. * '''syntax''': Syntaxschemas * '''colors''': Farbschemas * '''plugin''': normale Plugins * '''ftplugin''': dateitypspezifische Plugins * '''indent''': Einrückungsdefinitionen * '''autoload''': Funktionsdefinitionen, die nur bei Bedarf nachgeladen werden * '''after''': Funktionen und Einstellungen, die nach dem Laden aller Plugins direkt vor der Anzeige des Buffers geladen werden * '''doc''': Dokumentationen zu Plugins (Zugriff über `:help`) * ... Eine sehr umfangreiche Sammlung von VIM-Skripten ist auf [https://www.vim.org/scripts/ vim.org] {en} zu finden. {{{#!vorlage Hinweis Um die VIM-Verzeichnisse bei vielen Plugins übersichtlich zu halten, empfiehlt sich das Pathogen-Plugin von [github:tpope/vim-pathogen:Tim Pope] {en}. Damit können alle Plugins vollständig in eigene Unterverzeichnisse im Ordner '''~/.vim/bundle/''' installiert werden. }}} = Merkblätter (Cheat Sheets) = {{{#!vorlage Tabelle [[Bild(./vimcheatsgermankeyboard56dd.png, x450)]] [[Bild(./vimcheat.png, x450)]] +++ <:>Graphical Cheat Sheet von [http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html viemu.com] {en} <:>Übersicht von LinuxFibel de.linwiki.org }}} = Hilfe erhalten = Die eingebaute Hilfe {en} in VIM ist sehr umfangreich. Man erreicht sie im Kommandozeilenmodus mit `:help` bzw. `:help BEFEHL` (z.B. `:help :e` oder `:help foldcolumn`). = Links = == Intern == * [:VIM/Tipps:] - Tipps für erweiterte Funktionen wie LaTeX-Integration, Rechtschreibprüfung und Sonderzeichen * [:Textdateien_vergleichen#vimdiff:vimdiff] - mit VIM Dateien vergleichen * [:Editoren:] {Übersicht} Programmübersicht == Extern == * [https://www.vim.org/ Projektseite] {en} * [sourceforge2:vimdoc: VIM Dokumentationen] {en} * [https://vim.fandom.com/wiki/Vim_Tips_Wiki VIM Tipps Wiki] {en} * [sourceforge2:Cream:] {en} - Konfiguration für Einsteiger * [http://tnerual.eriogerg.free.fr/vim.html VIM Schnellübersicht] {en} {fr} {de} {id} {it} {pt} {es} {sv} * [https://lug.fh-swf.de/vim/#KURZANLEITUNG VIM PDF Kurzanleitung] {de} {dl} * [https://linuxwiki.de/Vim VIM Einführung im linuxwiki.de] {de} * [https://www.selflinux.org/selflinux/html/vim.html Praxisorientiertes VIM Tutorial] {de} - SelfLinux.org * [https://www-user.tu-chemnitz.de/~hot/VIM/VIM/regexp.html Reguläre Ausdrücke bei vim] {de} * [http://danielchoi.com/software/vmail.html Vmail] {en} - GMail-Client für VIM * [https://neovim.io/ Neovim] bietet erweiterte Funktionalität bei vollständiger kompatibilität zu Vim # tag: Editor, Shell, Server