vim
Warum ausgerechnet vim
Abschnitt betitelt „Warum ausgerechnet vim“vim (vi improved) stammt vom Editor vi ab, der aus den 1970er-Jahren kommt. Damals gab es keine Maus, darum läuft alles über die Tastatur. Das wirkt heute ungewohnt, hat aber einen handfesten Vorteil: vi oder vim ist auf jedem Linux- und Unix-System vorhanden, auch auf einem minimal installierten Server, in einem Container oder im Rettungsmodus. Wenn du per SSH auf einem fremden System eine Konfigurationsdatei anpassen musst, ist vim oft der einzige Editor, den du antriffst.
Du musst kein vim-Profi werden. Aber öffnen, ein paar Zeilen ändern, speichern und wieder rauskommen, das gehört zum Handwerk. Nach einer kurzen Einarbeitung ist vim zudem sehr effizient, weil die Hände nie die Tastatur verlassen.
Installation
Abschnitt betitelt „Installation“Ubuntu liefert je nach Installation nur vim-tiny, eine abgespeckte Version ohne Syntax-Highlighting und ohne vimtutor. Installiere die vollständige Version:
sudo apt updatesudo apt install vimvim --version | head -n 1Das Paket vim zieht vim-runtime mit den Hilfedateien und vimtutor automatisch nach. Ein früher übliches Paket vim-scripts gibt es nicht mehr. Der Befehl vi zeigt auf Ubuntu nach der Installation ebenfalls auf vim.
sudo apt install vim
sudo dnf install vim-enhanced. Das minimale Paket heisst dort vim-minimal.
Die drei Modi
Abschnitt betitelt „Die drei Modi“Der Kern des Konzepts: vim hat mehrere Modi, und dieselbe Taste tut je nach Modus etwas anderes.
| Modus | Zweck | Du erkennst ihn an |
|---|---|---|
| Normalmodus | Befehle: bewegen, löschen, kopieren, suchen. Hier startet vim. | Keine Anzeige unten links |
| Einfügemodus | Text tippen. Fast jede Taste landet als Zeichen in der Datei. | -- EINFÜGEN -- oder -- INSERT -- unten links |
| Kommandozeilenmodus | Längere Befehle: speichern, beenden, suchen und ersetzen, zu Zeile springen. | Ein : oder / in der untersten Zeile |
stateDiagram-v2
state "Normalmodus" as N
state "Einfügemodus" as I
state "Kommandozeilenmodus" as C
[*] --> N: vim datei.txt
N --> I: i, a, o, A, O
I --> N: Esc
N --> C: Doppelpunkt oder Schrägstrich
C --> N: Enter oder Esc
C --> [*]: wq oder q!
Die wichtigste Taste ist Esc: Sie bringt dich aus jedem Modus zurück in den Normalmodus. Wenn du nicht weisst, wo du bist, drücke zweimal Esc. Ein Piepsen bedeutet nur «du warst schon im Normalmodus».
Hands-on: öffnen, tippen, speichern, beenden
Abschnitt betitelt „Hands-on: öffnen, tippen, speichern, beenden“- Datei anlegen und vim starten. Du bist im Normalmodus.
Terminal-Fenster mkdir -p ~/vim-test && cd ~/vim-testvim notizen.txt - i drücken. Unten erscheint
-- INSERT --. Tippe zwei bis drei Zeilen Text, Enter für neue Zeilen. - Esc drücken. Die Anzeige unten verschwindet, du bist zurück im Normalmodus.
:wqtippen (erscheint unten) und Enter. Speichern und beenden.- Kontrolle im Terminal:
Terminal-Fenster cat notizen.txt
Das ist bereits der Minimal-Zyklus, den du auf jedem Server brauchst: vim datei, i, tippen, Esc, :wq.
Die wichtigsten Befehle
Abschnitt betitelt „Die wichtigsten Befehle“Alle folgenden Befehle gelten im Normalmodus. Gross- und Kleinschreibung ist relevant.
Bewegen
Abschnitt betitelt „Bewegen“| Taste | Wirkung |
|---|---|
| Pfeiltasten oder h j k l | links, runter, rauf, rechts |
| w / b | zum Anfang des nächsten / vorherigen Worts |
| e | zum Ende des Worts |
| 0 / $ | Zeilenanfang / Zeilenende |
| gg / G | Anfang / Ende der Datei |
:15 |
zu Zeile 15 springen |
| Ctrl+F / Ctrl+B | eine Seite vor / zurück |
Einfügen und Ersetzen
Abschnitt betitelt „Einfügen und Ersetzen“| Taste | Wirkung |
|---|---|
| i / a | einfügen vor / nach dem Cursor |
| I / A | einfügen am Zeilenanfang / Zeilenende |
| o / O | neue Zeile unterhalb / oberhalb öffnen und einfügen |
| r | ein Zeichen unter dem Cursor ersetzen (bleibt im Normalmodus) |
| R | überschreiben ab Cursor, bis Esc |
| cw | Wort ab Cursor löschen und in den Einfügemodus wechseln (change word) |
Löschen, Kopieren, Einfügen
Abschnitt betitelt „Löschen, Kopieren, Einfügen“| Taste | Wirkung |
|---|---|
| x | Zeichen unter dem Cursor löschen |
| dw | Wort löschen |
| dd | Zeile löschen (landet in der Zwischenablage) |
| dG | von hier bis Dateiende löschen |
| D | vom Cursor bis Zeilenende löschen |
| yy | Zeile kopieren (yank) |
| p / P | Zwischenablage unterhalb / oberhalb einfügen (put) |
| J | nächste Zeile an diese anhängen |
Gelöschte Zeilen liegen in der Zwischenablage: dd und danach p verschiebt eine Zeile.
Rückgängig, Suchen, Ersetzen
Abschnitt betitelt „Rückgängig, Suchen, Ersetzen“| Taste | Wirkung |
|---|---|
| u | Undo, beliebig oft |
| Ctrl+R | Redo |
| . | letzten Änderungsbefehl wiederholen |
/wort |
vorwärts suchen, n nächster Treffer, N vorheriger |
?wort |
rückwärts suchen |
:%s/alt/neu/g |
in der ganzen Datei alt durch neu ersetzen |
Speichern und Beenden
Abschnitt betitelt „Speichern und Beenden“| Befehl | Wirkung |
|---|---|
:w |
speichern (write) |
:q |
beenden, verweigert bei ungespeicherten Änderungen |
:wq oder :x |
speichern und beenden |
:q! |
beenden und Änderungen verwerfen |
:w! |
speichern erzwingen, etwa bei einer schreibgeschützten Datei, die dir gehört |
Zahlenpräfix
Abschnitt betitelt „Zahlenpräfix“Fast jeder Befehl nimmt eine Zahl davor: 3dd löscht drei Zeilen, 5j geht fünf Zeilen runter, 2w springt zwei Wörter, 3u macht drei Änderungen rückgängig, 4yy kopiert vier Zeilen.
Hands-on: Befehle ausprobieren
Abschnitt betitelt „Hands-on: Befehle ausprobieren“cd ~/vim-testseq 1 20 | sed 's/^/Zeile /' > zahlen.txtvim zahlen.txtProbiere der Reihe nach, alles im Normalmodus: G (ans Ende), gg (an den Anfang), 5j (fünf runter), dd (Zeile weg), u (zurück), 3dd (drei weg), p (wieder einfügen, aber eine Zeile tiefer), /Zeile 1 und dann n ein paar Mal, :12 (zu Zeile 12), A und ende tippen, Esc, :%s/Zeile/Line/g, :q!. Was erwartest du nach :q! in der Datei zu sehen? Prüfe mit cat zahlen.txt.
vimtutor
Abschnitt betitelt „vimtutor“Vim bringt ein eigenes Lernprogramm mit: vimtutor öffnet eine Kopie einer Übungsdatei in vim. Du liest die Anleitung und führst die Befehle direkt im Text aus. Die Datei ist eine Kopie, du kannst nichts kaputt machen.
vimtutor deFalls der Text trotzdem auf Englisch erscheint: :q!, Enter und nochmals versuchen. Die englische Version ist inhaltlich identisch. Rechne mit 30 bis 45 Minuten für die ersten drei Lektionen.
Hands-on: Lektionen 1 bis 3
Abschnitt betitelt „Hands-on: Lektionen 1 bis 3“Arbeite die folgenden Lektionen selbständig durch:
- Lektion 1: Cursor bewegen, vim beenden, Löschen, Einfügen, Anfügen, eine Datei editieren
- Lektion 2: Löschkommandos, Operatoren und Bewegungen, Zähler, Zeilen, Undo
- Lektion 3: Put, Replace, Change
Vertiefung: Lektionen 4 bis 7
Abschnitt betitelt „Vertiefung: Lektionen 4 bis 7“Wenn die ersten drei Lektionen sitzen (nicht vorher), lohnen sich die restlichen:
- Lektion 4: Cursorposition und Dateistatus, Suchen, passende Klammern, Substitute
- Lektion 5: externe Kommandos ausführen, Dateien schreiben, Text auswählen, Dateien einlesen
- Lektion 6: Open, Append, Replace-Modus, Kopieren und Einfügen, Optionen setzen
- Lektion 7: Hilfe aufrufen, Start-Skript (
.vimrc), Vervollständigen
Wer bei Lektion 4 merkt, dass die Grundlagen fehlen, geht lieber nochmals durch 1 bis 3.
Eine minimale .vimrc
Abschnitt betitelt „Eine minimale .vimrc“Die Datei ~/.vimrc wird beim Start gelesen. Zwei Zeilen reichen für den Anfang:
set numbersyntax onset number zeigt Zeilennummern (hilfreich mit :15 und bei Fehlermeldungen wie «Zeile 23»), syntax on färbt Shell-Skripte und Konfigurationsdateien ein. Gleich mit vim anlegen:
vim ~/.vimrcBeim nächsten Start von vim ist die Einstellung aktiv. Innerhalb von vim lässt sich dasselbe temporär mit :set number oder :set nonumber schalten.
Lösung anzeigen
Ein möglicher Weg, alles im Normalmodus, ausser wo Esc steht:
/LOESCHENEnter,dd,n,dd/nanoEnter,cw,vimtippen, Esc. Alternativ:%s/nano/vim/.gg,2j(auf1 Netzwerkkabel),yy,/5 MausEnter,p, dannr6auf der neuen Zeile.G,o, Name tippen, Esc:wqEnter
Erwartetes Ergebnis:
Einkaufsliste Server-Setup==========================1 Netzwerkkabel2 USB-Stick3 Monitor4 Tastatur5 Maus6 NetzwerkkabelStandardeditor: vimEnde der ListeVorname Nachname# Befehle: dd, cw, yy, p, rSelbstcheck · 6 Fragen
Weiterführend
Abschnitt betitelt „Weiterführend“- vim-Spickzettel in der Referenz dieses Kurses.
:helpinnerhalb von vim, zum Beispiel:help dd. Verlassen mit:q.- ubuntuusers-Wiki: VIM