Vim – Bereiche mit Klammern umschließen


Manchmal ist die Denke einfach zu kompliziert. Da wollte ich in vim einen Bereich möglichst effizient mit runden Klammern versehen und habe eine Weile rum gemurgst, bis ich dann die einfache Lösung gefunden habe:

  1. Bereich auswählen mit v und z.B. $ bis zum Zeilenende
  2. dann c drücken
  3. () schreiben
  4. ESC drücken und
  5. ein großes (shift) P drücken

also v$c()<ESC>P

Und alles ist schön umklammert.

Wenn es egal ist den Bereich visuell zu markieren, dann geht es auch ohne das v und das $ (bis Zeilenende) muss nach dem c eingegeben werden. (Danke Rebeka!)

c$()<ESC>P oder gleich C()<ESC>P

Weitere Varianten wären:

  1. Bis zum nächsten Vorkommen z.B. des Buchstabens „m“ cfm()<ESC>P
  2. Vom vorherigem Vorkommen eines „t“ bis zum nächsten Vorkommen eines „m“ Ftcfm()<ESC>P
  3. Wenn mitten im Wort gestartet wird, das natürlich auch umklammert werden soll, als erstes ein b tippen z.B. bC()<ESC>P
  4. Die nächsten 3 Worte c3w()<ESC>P oder eben bc3w()<ESC>P

Vim Zeitgeschichte – Time Table

Ich bin letztens über einen Artikel auf pikuma.com über die Vor- und Geschichte von Vim gestolpert, den ich auch weiter unten in den Quellen verlinkt habe. Ich fand die Geschichte über die Entstehung des Editors Vim und seiner Vorgänger so beeindruckend, dass ich für mich eine Zeittafel zusammengestellt habe, wann wer was gemacht hat.

Das ist schon sehr krass, dass Vim 1988 auf dem Amiga begonnen und am 02.11.1991 in der Version 1.14 über die Disketten Distribution Fred Fish Disk #591 verteilt wurde. Und dass der Ursprung dieses Editors jetzt über 55 Jahre zurück liegt.

Am Beeindruckendsten ist eigentlich die hohe Qualität, der riesig große Funktionsumfang, die Verfügbarkeit auf so vielen Plattformen, die unglaubliche Geschwindigkeit und die extrem resourcenschonenden Eigenschaften, alles vereint in einem unscheinbar wirkenden Editor.

Wenn ihr die Details zur Geschichte wissen wollt, dann lest den englischen Artikel auf pikuma.com (in den Quellen unten). Dort sind auch alle wichtigen Informationen nochmal verlinkt.

  • 1968 – ed von Ken Thompson
  • 1973 – em von George Coulouris
  • 1973 – en & ex von Bill Joy und Chuck Haley
  • 1977 – Bill Joy entwickelte den Visual Mode VI in ex . Viele der vi shortcuts und Navigationstasten, die bis heute benutzt werden, basieren auf dem DM-3A keyboard Layout.
  • 1979 – In BSD Unix wird ein vi hard link auf den ex Visual Mode gesetzt (Mai 1979 )
  • 1987 – Steve für Atari von Tim Thompson
  • 1988 – Start an den Arbeiten von Vi IMitation 1.0 von Bram Moolenaar on Amiga
  • 1990 – Elvis von Steve Kirkendall
  • 1991 – Vim „Vi IMitation“ v1.14 von Bram Moolenaar erscheint 02.11.1991 auf dem Amiga auf Fred Fish disk #591
  • 1993 – Der Name wurde auf "Vi iMproved" mit dem Erscheinen der Version v1.22 von Bram Moolenaar geändert. Außerdem erscheint ein Port für Unix
  • 1994 – Vim 3.0 Feature: Multiple windows
  • 1996 – Vim 4.0 Feature: Graphical User Interface
  • 1998 – Vim 5.0 Feature: Syntax highlighting
  • 2001 – Vim 6.0 Feature: Folding and multi-language
  • 2006 – Vim 7.0 Feature: Spell checking support – Intelligent completion – Tab pages – Undo branches – Browsing remote directories, zip and tar archives
  • 2007 – Vim 7.1 Feature: Bug Fix Release
  • 2008 – Vim 7.2 Feature: floating point support
  • 2010 – Vim 7.3 Feature: Persistent undo and undo for reload – Blowfish encryption, encryption of the swap file – Conceal text – Lua interface – Python 3 interface
  • 2013 – Vim 7.4 Feature: A new, faster regular expression engine. – More than a thousand fixes and small improvements.
  • 2016 – Vim 8.0 Feature: Asynchronous I/O support, channels, JSON – Jobs – Timers – Partials, Lambdas and Closures – Packages – New style testing – Viminfo merged by timestamp – GTK+ 3 support – MS-Windows DirectX support
  • 2018 – Vim 8.1 Feature: Bug Fix Release
  • 2019 – Vim 8.2 Feature: Popup Windows
  • 2022 – Vim 9.0 Feature: Vim9 Script
  • 20. Februar 2022 – Todestag von Sven Guckes, längster Projektbegleiter und Registrierer der Domain vim.org
  • 03. August 2023 – Todestag von Bram Moolenaar, der Vim ins Leben gerufen hat
  • 2024 – Vim 9.1 Feature: Classes and objects for the Vim9 scripting language & Smooth scrolling

Abfrage in Vim für die Features einer bestimmten Version
z.B. :help version-7.2

Quellen

  1. https://de.wikipedia.org/wiki/Vim
  2. https://en.wikipedia.org/wiki/Vim_(text_editor)
  3. https://github.com/vim/vim-history
  4. https://en.wikipedia.org/wiki/Elvis_(text_editor)
  5. https://en.wikipedia.org/wiki/ADM-3A
  6. https://en.wikipedia.org/wiki/Ex_(text_editor)
  7. https://en.wikipedia.org/wiki/Ed_(text_editor)
  8. http://www.eecs.qmul.ac.uk/~gc/history/
  9. https://pikuma.com/blog/origins-of-vim-text-editor
  10. https://de.wikipedia.org/wiki/Bram_Moolenaar
  11. https://www.heise.de/news/Vim-Versteher-und-Kommandozeilenerklaerer-Sven-Guckes-ist-tot-6511004.html
  12. https://www.heise.de/news/Zum-Tode-Bram-Moolenaars-Vim-Koryphaee-Weltenbummler-und-Spendensammler-9235897.html

Vim – mit Tabs fensterln

Ein Buffer (Puffer) ist der im Arbeitsspeicher befindliche Text einer Datei.
└- Ein Fenster (Window) ist ein Ausschnitt (Viewport) aus einem Buffer.
└— Eine Tab-Seite (Tab) ist eine Sammlung von Fenstern.

Hilfe :help tab-page
Kommando: <none>

Öffnen

  • tabnew <NAME> Neues Tab (Buffer)
  • tabf <NAME> Find – sucht im aktuellen Verzeichnis nach einer Datei. Tabulator Completion funktioniert
  • tab <VIM BEFEHL> öffnet ein neues Tab und führt einen Vim Befehl aus z.B. :tab help tab-pages

Mit einem neuen Tab kann auch gleich eine bestehende Datei geladen werden, indem mit dem Befehl der Dateiname mitgegeben wird.

Mehrere Dateien können als Tabs direkt bei Aufruf von vim mit dem Parameter -p geladen werden

vim -p Datei1 Datei2 Datei3 Datei4

Standardmäßig können 10 Dateien gleichzeitig geladen werden. Dieses Maximum kann verkleinert oder erweitert werden mit der Direktive :set tabpagemax=<NUMMER> oder in der vimrc mit set tabpagemax=<NUMMER>

Schließen

  • tabclose Schliesst das Tab. Mit einem ! Ausrufezeichen, wenn Änderungen nicht gespeichert werden sollen
  • :q
  • Strg+w q funktioniert nur, wenn nichts geändert wurde
  • tabonly Schliesse alle anderen Tabs außer dem aktuellen Tab

Navigation

  • Strg+BildRunter / Strg+BildHoch Tab wechseln rechts/links. Tipp: 2+Strg+BildRunter
  • gt / :tabn zum nächsten Tab rechts wechseln (next). Tipp: 5gt springt 5 Tabs nach rechts
  • gT / :tabp zum vorherigen Tag links wechseln (previous)
  • :tabs zeigt eine Übersicht aller Tabs

Reihenfolge

  • :tabm / :tabmove verschiebt das aktuelle Tab ganz nach rechts
  • :tabm <NUMMER> verschiebt das aktuelle Tab aun die Postion von NUMMER. Fängt bei 0 an !

Weitere Infos

  • :set showtabline=<NUMMER> 0 = Tabline ausblenden, 1 = automatisch, 2 = immer einblenden
  • :tabdo Einen Befehl für alle offenen Tabs ausführen. Zum Beispiel :tabdo %s/foo/bar/g

Mehr Artikel zu Vim im Blog

Vim – Windows

Ein Buffer (Puffer) ist der im Arbeitsspeicher befindliche Text einer Datei.
└- Ein Fenster (Window) ist ein Ausschnitt (Viewport) aus einem Buffer.
└— Eine Tab-Seite (Tab) ist eine Sammlung von Fenstern.

Hilfe :help windows
Kommando :wincmd Strg+w

Die aktuelle Ansicht in mehrere Fenster aufteilen.

Detailliertere Informationen und weitere alternative Befehle sind in der Hilfe zu finden

Teilen & Neu

  • Strg+w s / :sp / :split Fenster horizontal teilen (gleicher Inhalt/Buffer)
  • Strg+w v / :vs / :vsplit Fenster vertikal teilen (gleicher Inhalt/Buffer)
  • Strg+w n / :new Fenster horizontal teilen und neues Dokument (leerer Buffer) erstellen
  • :vne / :vnew Fenster vertikal teilen und neues Dokument (leerer Buffer) erstellen

Schliessen

  • Strg+w q / :q Fenster schließen.
  • Strg+w o / :on / :only schließt alle anderen Fenster, ausser das aktuelle Fenster
  • Es gibt noch viele weitere Parameter zum Fenster schließen

Navigation

  • Strg+w Pfeiltasten Zwischen den Fenstern wechseln. Es gehen auch die Vim Cursor
  • Strg+w p Zum letzten Fenster zurück wechseln
  • Strg+w r / Strg+w R Fenster durchrotieren runter/rechts und hoch/links

Größe

  • Strg+w = Alle Fenster gleich groß machen
  • Strg+w - Das aktuelle Fenster um 1 vertikal kleiner machen. Strg+w 5 - um 5 kleiner machen
  • Strg+w + Das aktuelle Fenster um 1 vertikal größer machen
  • Strg+w _ Das aktuelle Fenster vertikal maximieren. Alle anderen Fenster so klein wie möglich machen
  • Strg+w < Das aktuelle Fenster um 1 horizontal kleiner machen. Strg+w 7 < um 7 kleiner machen
  • Strg+w > Das aktuelle Fenster um 1 horizontal größer machen
  • Strg+w | Das aktuelle Fenster horizontal maximieren
  • In einer grafischen Oberfläche lassen sich die Fenster am Rahmen mit der Maus kleiner und größer machen

Mehr Artikel zu Vim im Blog

Vim-Zeilenspielereien – Join

Zeilen zusammenfügen oder teilen in allen Variationen.
Der Befehl dafür heißt JOIN

Anmerkung: Groß-/Kleinschreibung ist wichtig. Großbuchstaben werden nicht extra mit einem SHIFT hervorgehoben

Join zwei Zeilen zusammenführen J mit Leerzeichen

J – Sollen zwei Zeilen, die durch einen Zeilenumbruch getrennt wurden zusammengeführt werden, so kann in der oberen Zeile einfach ein großes J gedrückt werden. Das führt dazu, dass die untere Zeile nach oben geholt UND mit einem Leerzeichen Abstand an die aktuellen Zeile angehängt wird.

Im Befehlsmodus – :join!
Suchmuster – :g/pattern/join

Join ohne Leerzeichen gJ

gJ – Soll die untere Zeile ohne Leerzeichen an die aktuelle Zeile angehängt werden, so lässt der Befehl gJ das Leerzeichen weg.

Visual Join – Mehrere Zeilen verbinden v+Motion+J

Join kann auch mit der Visual Markierung v und Motion Befehle benutzt werden.

v + Motion + J oder gJ für mit oder ohne Leerzeichen

Beispiele

  • Befehl v4kJ
    • v startet den visuellen Modus in der aktuellen Zeile
    • 4 wird das nächste Kommando 4x wiederholen
    • k eine Zeile hoch (und das dann 4x)
    • J und verbinde diese 4 Zeilen miteinander

  • Befehl v5jgJ
    • v startet den visuellen Modus in der aktuellen Zeile
    • 5 wird das nächste Kommando 5x wiederholen
    • j eine Zeile runter (und das dann 5x)
    • g der Befehl JOIN soll keine Leerzeichen hinzufügen
    • J und verbinde diese 5 Zeilen miteinander ohne zusätzliche Leerzeichen

Hilfe

Eine ausführlichere Hilfe findet sich in Vim unter :help J

Weitere Vim Artikel im Blog

Vim-Cheat Sheet

Weitere Vim Artikel hier im Blog.

Vim Modi

Erklärung

Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen.
Es gibt sechs Grundmodi. Zusätzlich gibt es noch fünf weitere Grundvarianten der Grundmodi.

Normalmodus ESC

Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der Esc-Taste gelangt man immer in den Normalmodus zurück.

Der Punkt . wiederholt immer den letzten eingegebenen Befehl.

Einfügemodus / Insert

Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i (für engl. insert = einfügen).

Kommandomodus / Command

Vom Normalmodus ausgehend! Dieser Modus wird durch den einleitenden Doppelpunkt : erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter „Eingabetaste“ wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos / (Textmuster vorwärts suchen), ? (Textmuster rückwärts suchen) und das Filter-Kommando !, mit dem die UNIX-Kommandos „UNIX-Kommandos“ (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.

Vim Normalmodus ESC ESC

Vim beenden & speichern (Kommandomodus)

  • :q beenden (quit)
  • :q! , :cq, SHIFT + ZQ beenden ohne zu speichern trotz Änderungen (cancel)
  • :wq , SHIFT + zz speichern (write) und beenden
  • :w aktueller Inhalt in Datei speichern
  • :w FILE.TXT speichert den Inhalt des Editors in die Datei FILE.TXT
  • :w !sudo tee FILE.TXT speichert die Datei mit dem vorangehenden sudo Aufruf

Multiplikator

:help motion-count-multiplied

Zu einem Befehl kann noch eine Zahl eingegeben werden, dann wird der Befehl entsprechend oft wiederholt.
Beispiele

  1. Wurde eine Zeile mit yy (yank) in den Zwischenspeicher kopiert, dann wird sie mit 5p 5x darunter eingefügt.
  2. Sollen die nächsten 7 Zeichen rechts gelöscht werden : 7x
  3. Sollen ab der aktuellen Position die nächsten 3 Wörter gelöscht werden: 3dw
  4. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden: 3diw (3x Delete Include Word)
  5. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden und gleich in den Eingabemodus gewechselt werden: 3ciw (3x Change Include Word)
  6. Die nächsten 10 Zeilen löschen: 10dd
:help motion
:help scroll-cursor
  • Pfeiltasten , hjkl links, runter, hoch, rechts . Die Pfeiltasten hjkl sind sehr wichtig bei der Nutzung von Multiplikatoren.
  • Bild hoch , Bild runter Eine Seite hoch / runter
  • Pos1 , 0 an den Zeilenanfang springen
  • ^ springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab ist
  • Ende , $ an das Zeilenende springen
  • w ein Wort nach rechts springen (Wortanfang)
  • e an das Ende eines Wortes, auf den letzten Buchstaben springen (Wortende)
  • b ein Wort nach links springen (Wortanfang)
  • ) einen Satz vorwärts springen
  • ( einen Satz rückwärts springen
  • SHIFT + h zur ersten Zeile des aktuellen Fensters springen
  • SHIFT + m in die Mitte des aktuellen Fensters springen
  • SHIFT + l in die letzte Zeile des aktuellen Fensters springen
  • STRG + d einen halben Bildschirm runter blättern (down)
  • STRG + u einen halben Bildschirm hoch blättern (up)
  • gg an den Datei Anfang springen
  • SHIFT + g an das Datei Ende springen
  • : + ZAHL springt in die Zeile ZAHL
  • f + ZEICHEN springt zum nächsten Vorkommen des Zeichens
  • SHIFT+ f + ZEICHEN springt zum vorherigen Vorkommen des Zeichens
  • z + ENTER oder zt aktuelle Zeile in die erste Zeile des Displays scrollen (top)
  • zz oder z. aktuelle Zeile in die Mitte des Bildschirms scrollen
  • z- oder zb aktuelle Zeile an den unteren Rand scrollen (bottom)

Marks (Bookmarks)

:help bookmark

Bookmarks sind einzelne Zeichen von a-z und A-Z die im Text gesetzt werden können, um schnell hin und her zu springen.

  • m + ZEICHEN einen Marker setzen. z.B. mb setzt den Marker b
  • ' + ZEICHEN zu einem Marker springen . z.B. 'b springt zum Marker b
    • Das ' ist das Zeichen auf einer deutschen Tastatur auf dem #

Undo & Redo

:help undo
  • u Undo (Rückgängig machen)
  • SHIFT + u Undo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurden
  • STRG + R Redo
  • :undolist zeigt den Verlauf der letzten Änderungen, die rückgängig gemacht werden können. Dabei zeigt die Nummer den Index der Veränderung, die direkt ausgewählt werden kann. Changes zeigt an, wieviele Veränderungen gemacht wurden und die Uhrzeit, wann die Veränderungen gemacht wurden.
  • NUMMER + STRG + r macht die Veränderung mit der Index NUMMER wieder rückgängig
  • Plugins wie undotree oder mundo machen das Undo & Redo sehr übersichtlich und einfacher

Copy & Paste

  • y Kopieren (yank)
  • yy Ganze Zeile kopieren
  • p vor dem aktuellen Cursor einfügen, oder Zeile
  • Shift + p nach dem aktuellen Cursor einfügen, oder Zeile
  • Zwischenablage / Clipboard (FAQ System Clipboard !)
  • "*y , "+y in den System Zwischenspeicher kopieren
  • "*p , "+p aus den System Zwischenspeicher einfügen. Analog "* oder "+ + SHIFT + p
  • Register / Vim interne Zwischenablage
    • Vim unterstützt von a-z 48 verschiedene Register (Zwischenablagen). So können unterschiedliche Dinge in verschiedene Register kopiert und an anderer Stelle in gleicher oder neuer Reihenfolge eingefügt werden.
    • Das Register wird mit " eingeleitet und der folgende Buchstabe a-z definiert in welchem Register der Inhalt gespeichert werden soll
  • "gyy kopiert die aktuelle Zeile ins Register g
  • "gp fügt den Inhalt aus dem Register ab dem aktuellen Cursor ein

Register / Zwischenspeicher 48 :registers

:help registers

  • Auszüge aus dem Hilfedokument
  • :registers zeigt alle Register an. :registers ZEICHEN zeigt das Register ZEICHEN an
  • STRG + r + REGISTER fügt im Insertmodus den Inhalt von REGISTER direkt ein.
  • "" (unnamed) Standardregister in das alles rein kopiert wird, was mit dcsx gelöscht oder mit y kopiert wurde
  • "a-z (named) mit einem großen A-Z wird das Kopierte an das a-z Register angehängt. Zusammen mit einem > wird vor dem Anhängen ein Zeilenumbruch eingefügt.
  • "0-9 (numbered) In Register 0 wird immer der zuletzt kopierte (yank) Inhalt. In Register 1 steht immer der zuletzt gelöschte Inhalt dc
  • "- Im Small Delete Register steht immer der zuletzt gelöschte Inhalt, wenn es weniger als eine Zeile war
  • Read-Only
    • ". enthält immer den zuletzt eingefügten Text
    • "% enthält den Dateinamen
    • ": enthält den zuletzt eingegeben Befehl
  • "* , "+ , "~ Zwischenspeicher / Clipboard . "~ ist der Inhalt des letzten Drag’n’Drop auf das Vim Fenster
  • "_ (black hole) bei einem Löschvorgang wird nichts in Register gespeichert
  • "/ (last search) enthält den Text der letzten Suche

Makros / Recording q

:help recording
  • MAKRO AUFZEICHNEN
    • q + a-z mit q wird das Recording gestartet und das nächste Zeichen z.b. a ist der Name des Makros. Also qa startet die Aufnahmen von Makro a
    • Mit dem erneuten Drücken der Taste q wird die Aufzeichnung des Makros beendet
  • MAKRO ABSPIELEN / AUFRUFEN
    • @q + a-z mit z.B. @qa wird das Makro a abgespielt bzw ausgeführt
    • Mit @@ wird das Makro wiederholt
    • mit 10@qa wird das Makro 10x hintereinander ausgeführt
  • MAKROS EDITIEREN
    • Makros werden als normaler Text in Registern gespeichert
    • Das REGISTER am besten in eine leere Zeile einfügen, weil nach dem Editieren einfach direkt die gesamte Zeile wieder im Register gespeichert werden kann " + REGISTERNUMMER + p z.B. "4p
    • Die Zeile editieren und (die gesamte Zeile) wieder zurück in das Register schreiben " + 4 + yy
    • Zur Kontrolle kann :registers oder :registers 4 eingegeben werden
    • Ein Makro kann einfach gelöscht werden, indem nichts aufgezeichnet wird. Z.b. Makro a = q4q
  • STEUERUNGZEICHEN EINGEBEN
    • Im Eingabemodus STRG + v + TASTE z.B. Enter/Return, ESC, F2, Backspace ….
  • REKURSIVE MAKROS
    • Im Makro selbst das Makro aufrufen
    • Läuft solange, bis es auf einen Fehler aufläuft

Autovervollständigung :abbr

  • :abbr + abkrz + AUSGESCHRIEBENER BEGRIFF wenn im Einfügemodus der Begriff abkrz und Leertaste (oder Enter, dann mit Zeilenumbruch) eingegeben wird, erscheint der AUSGESCHRIEBENER BEGRIFF
  • Beispiel: :abbr zb Zum Beispiel

Groß-/Kleinschreibung

  • ZEICHEN
    • ~ ändert das aktuelle Zeichen auf Groß oder Klein
  • WORT
    • g~w Invertiert die Groß-/Kleinschreibung des aktuellen Wortes
    • guw Ändert von der aktuellen Position bis zum Ende des Worts von Groß- auf Kleinschreibung
    • guaw Ändert das gesamte Wort auf Kleinschreibung. Egal auf welcher Position der Cursor ist
    • gUw Ändert von der aktuellen Position bis zum Ende des Worts von Klein- auf Großschreibung
    • gUaw Ändert das gesamte Wort auf Großschreibung. Egal auf welcher Position der Cursor ist
  • ZEILE
    • guu Ändert die aktuelle Zeile von Groß- auf Kleinschreibung
    • gUU Ändert die aktuelle Zeile von Klein- auf Großschreibung
    • g~~ Invertiert die Groß-/Kleinschreibung der gesamten Zeile
    • gU5jÄndert die darunter liegenden Zeilen zu Großschreibung
    • gu3k Ändert die darüber liegenden Zeilen zu Großschreibung
  • SATZ
    • gU)Ändert alles zu Großschreibung bis zum Ende des Satzes
  • ABSATZ
    • gu} Ändert alles bis zum Ende des Absatzes zu Kleinschreibung
  • DOKUMENT
    • guG Ändert alles zu Kleinschreibung bis zum Ende des Dokumentes

Auswählen/Markieren

  • v Zeichenweise
  • SHIFT + v + Pfeiltasten Zeilenweise
  • STRG + v + Pfeiltasten Vertikal
  • Beispiele: 10v markiert 10 Zeichen, 3wv markiert 3 Wörter, )vy markiert bis zum Ende des Satzes und kopiert ihn in den Zwischenspeicher/Register.

Löschen & entfernen

  • x Zeichen unter dem Cursor löschen
  • SHIFT + x Zeichen links vom Cursor löschen
  • DELETE & CHANGE
    • Gelöscht werden kann mit d (delete) oder c (change). Bei d bleibt Vim im Normalmodus und bei c wird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
  • dd löscht die komplette Zeile
  • dw , cw löscht das Wort rechts
  • dip , cip Lösche nur den Absatz
  • dap , cap Lösche den Absatz und die nachfolgenden Leerzeilen

Suchen

  • /Suchbegriff<ENTER> vorwärts suchen. Vim zeigt den ersten Fundort an. Soll der nächste Fundort angesprungen werden muss die Taste n (Next) oder * gedrückt werden mit Shift + n oder # wird die Suche rückwärts ausgeführt.
  • ?Suchbegriff<ENTER> rückwärts suchen

Vim Command Modus

Datei laden

  • :e Öffnet den Dateibrowser. Bei Auswahl mit der Entertaste wird die Datei in das aktuelle Fenster geladen.
  • :e FILE.TXT öffnet direkt die Datei in das aktuelle Fenster
  • :Sex Teilt das Fenster horizontal in ein weiteres Fenster mit einem Dateibrowser
  • :Vex Teilt das Fenster vertikal in ein weiteres Fenster mit einem Dateibrowser

Fenstermanagement

  • :tabnew Neues Fenster in neuem Tab
    • :tabprev , gt gehe zum nächsten Tab
    • :tabnext , gT gehe zum vorherigen Tab
      • Bessere Lesbarkeit der Tabs
      • :hi tablinesel ctermbg=darkblue ctermfg=white
      • :hi tabline ctermbg=black ctermfg=green
    • Hilfe :help tabpage
  • :new Neues Fenster horizontal
  • :split Aktuelles Fenster horizontal teilen
  • :vsplit Aktuelles Fenster vertikal teilen
  • STRG + ww wechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle Fenster
  • STRG + w<N> mit <N> sind die Pfeiltasten gemeint, oder auch hjkl mit denen direkt in das entsprechende Fenster gewechselt werden kann.
    Zum Beispiel
    • STRG + wl wechselt in das linke Fenster
    • STRG + wj in das untere Fenster
    • STRG + w<Pfeiltaste links> in das linke Fenster.
    • :ls die offenen Buffer (Fenster/Tabs) anzeigen lassen

Session Management

  • vim -S startet Vim wieder mit der zuletzt gespeicherten Session (aus der Session.vim Datei)
  • :mks! speichert die aktuelle Session in der Session.vim Datei

FAQ

  1. Paste Modes (Einfüge Modi)
    :set paste deaktiviert einige Automatismen, so dass eingefügte Daten z.B. ihre Struktur erhalten und nicht umformatiert werden. :set nopaste deaktiviert dieses Verhalten wieder.
    Hilfen :help paste , :help pastetoggle
  2. System Clipboard (Zwischenablage) Copy&Paste – Interaktion
    Damit "* und "+ funktioniert, muss ein Vim Paket mit grafischer Unterstützung installiert sein, in das die Option +clipboard mit eincompiliert wurde.
    Unter Linux mit einem X11 System repräsentiert "* die Option, womit der Inhalt mit der mittleren Maustaste an die aktuelle Stelle eingefügt werden kann.
    Um zu prüfen, ob die aktuelle Vim Installation den Austausch mit dem System Clipboard unterstützt: Im Normalmodus :echo has('clipboard') und ENTER eingeben. Wenn als Ergebnis eine 0 heraus kommt, wird es nicht unterstützt.
    Durch die Installation des Paketes vim-gtk3 (Ubuntu) wird Copy&Paste unterstützt.
    Hilfen :help clipboard , :help registers , :help cb (Current Buffer)

Weitere Vim Artikel hier im Blog.

Quellen

  1. https://de.wikipedia.org/wiki/Vim
  2. https://wiki.ubuntuusers.de/VIM/
  3. Einführung zu Vim – Tutorials Deutsch https://www.youtube.com/playlist?list=PLZ0CUq-i3Io9dAIKsHNwNAnTeKXamcQ5N
  4. Vim Tricks Live Coding auf Deutsch mit Daniel Siepmann https://youtu.be/P5tAKRVYj4E
  5. Register und Makros in Vim (clt23) Info Seite / Video

Vim – Suchen & Ersetzen – RegEx

Reguläre Ausdrücke (RegEx) sind DER Shit, wenn es darum geht extrem schnelle und auch sehr komplexe Dinge mit Texten bzw Strings oder einfach generell bei Suchen zu veranstalten.

Ein Anwendungsfall kommt immer wieder vor, nämlich das Suchen&Ersetzen.

Das Muster sieht so aus

:[range] s / [pattern] / [string] / [flags] [count]

[range]

  • bei range steht meist ein Prozentzeichen % das für den gesamten Text aka alles steht
  • hier können auch 1,$ = erste Zeile, erstes Zeichen bis letzte Zeile, letztes Zeichen
  • .,$ heisst von der aktuellen Zeile bis zum Ende
  • {Nummer} – in Zeile Nummer sowieso z.B. Zeile 14
  • Die Übersicht der schier unendlichen Bereichsangaben bekommst du, wenn du vim aufrufst und dann :h range eingibst

s (substitute)

  • Substitute ist die Suchen&Ersetzen Funktion. Wichtig zu wissen ist, dass alle Zeichen, die nicht in a-z und A-Z sind, müssen mit einem vorangestelltem Backslash \ „escaped“ werden.
  • Also Zahlen, Punkte, Klammern und Sonderzeichen mit einem Backslash \ escaped werden.
  • Ein Backslash wird dann natürlich auch mit einem Backslash escaped \\. Und ein Slash im Suchstring wird natürlich auch mit einem Backslash escaped \/ . Auch ein Leerzeichen bzw Blank wird mit einem Backslash escaped.
  • Der Grund dafür ist, dass viele dieser Zeichen selbst eine Funktion für die Suche darstellen. Und damit da keine Verwechselung entsteht muss extra „escaped“ werden.

[pattern]

  • Pattern ist der zu suchende Text
  • In einem Pattern können auch wiederum Pattern-Funktionen eingefügt werden, wie z.B. ab dem 5. Zeichen (spalte/column) %5c oder bis zum 5. Zeichen %>5c und viele weitere.
  • in vim :help pattern

[string]

  • String ist der Text, der das gesuchte Pattern ersetzt werden soll.

[flags]

  • g (global) wiederholt das Suchen&Ersetzen, bis zum Ende des Textes. Wird g nicht angegeben, wird nach dem ersten Suchtreffer aufgehört.
  • c (confirm) zum Bestätigen des Ersetzens
  • i (ignore) um Groß/Kleinschreibung zu ignorieren

[count]

  • der Parameter count wird bei Bedarf in einer positiven ganzen Zahl wie z.B. 5 angegeben. Er wirkt sich auf das Suchen&Ersetzen so aus, dass z.B.
  • %s/blah/blubb/g 5 – vom Textanfang die ersten 5 Zeilen bearbeitet werden
  • 10,$ s/blah/blubb/g 5 – ab Zeile 10, die Zeilen 10, 11, 12, 13, 14, also insgesamt 5 Zeilen bearbeitet werden.

Slash / – das Slash „/“ trennt die verschiedenen Parameter voneinander.

Will ich also den merkwürdigen String „Maier/(Schmidt)-Hans\Jens.Familie?“ in meinem gesamten Text mit „Bullshit!„ersetzen, sähe der Aufruf so aus

:%s/Maier\/\(Schmidt\)\-Hans\\Jens\.Familie\?/Bullshit\\!/g

Einfach vor jedes nicht a-zA-Z Zeichen ein Backslash