Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:vim

Dies ist eine alte Version des Dokuments!


Überleben mit vi

Befehl Funktion
i Einfügemodus
<ESC> Befehlsmodus
:w speichern
:q! beenden ohne speichern
:wq speichern und beenden
:x speichern und beenden

Weitere Befehle

u Rückgängig
Strg+r undo Wiederherstellen

In älteren Vim-Versionen nützlich:

J hängt die nächste Zeile an das Ende der aktuellen Zeile an (join)

VIM lernen mit einem Browser-Spiel

VIM lernen mit VIM

$ vimtutor

Grundlagen

w ein Wort weiter (word)
b ein Wort zurück (back)
gg Dateianfang (go)
10gg Zeile 10
G Dateiende (go)
/ Vorwärts suchen
? Rückwärts suchen
n Zum nächsten Treffer in gleicher Richtung springen
N Zum nächsten Treffer in entgegengesetzter Richtung springen

Änderungsbefehle I

dw Wort löschen (delete word)
dd Zeile löschen
dj Zeile und nächste Zeile löschen
dk Zeile und vorherige Zeile löschen
D bis zum Ende der Zeile löschen
cw Wort ändern (change word)
cc Zeile ändern
C bis zum Ende der Zeile ändern

copy & paste

yy Zeile kopieren
dd Zeile ausschneiden
p nach aktueller Position einfügen
P vor aktueller Position einfügen
vwy Wort kopieren
yw Wort kopieren

Beispiel Texte

Anwendung der Grundlagen

suchen und ersetzen I

/ suchen

.. Suchwort eingeben ..

v visueller modus - zeichenweise
[Shift] v visueller modus - zeilenweise
[Strg] v visueller modus - spaltenweise

.. Suchwort markieren ..

c markierten text ändern
I einfügen
d löschen
y kopieren

.. Ersatzwort eingeben

<ESC> Änderung beenden
n nächster Treffer
. letzen Befehl wiederholen

Fortgeschrittene Befehle

Befehl Funktion
ZZ speichern & verlassen
:x speichern & verlassen

Suchen und Ersetzen II

Befehl Funktion
:g/^$/d Alle Leerzeilen löschen
:%s/suchwort/ersatz/gc suchen und ersetzen, mit Bestätigung

Dateinamen-Ergänzung a la Tab-Taste

Im Einfügemodus:

Strg+x f

Mehr dazu: vim.org Dokumentation

Mehrere Dateien bearbeiten

vi -o file1 file2 horizontaler Split
(Fenster wechseln mit Ctrl+W Cursortaste)
vi -O file1 file2 vertikaler Split (Dateien nebeneinander)
vi -p file1 file2 Tab-Modus
(Dateitabs wechseln mit g t (goto) - T für rückwärts

Konfigurationsdateien ohne Kommentare anzeigen

:set fdm=expr
:set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0

Navigationsbefehle II

{ zum nächsten Absatz
} zum vorherigen Absatz

Nützliche Informationen und Befehle

Vim öffnen:

vim <Datei> - öffnet eine leere Datei mit dem Namen welche ich beim Öffnen angegeben habe
vim + <Zeilennummer> + <Datei> - öffnet eine leere Datei mit dem Namen welchen ich angegeben habe und springt in die angegebene Zeile
vim . - Ich kann mit die Datei aussuchen welche ich öffnen will. Durch den Punkt werden die Dateien aus dem aktuellen Verzeichnis angezeigt

Modi:

  1. Command/normal Mode
  2. Insert Mode (zum normalen Schreiben)
  3. Ex Mode (das was man kriegt, wenn man im command-Mode „:“ drückt)
  4. Visual Mode

Command Mode:

Im command-Mode haben Befehle den folgenden Aufbau:

[count][command][range]

oder

[command][count][range]

[count] ist Dabei optional. Es gibt an, wie oft [command] oder [range] ausgeführt werden soll.

Mit „range“ bezeichne ich Sprungbefehle. Sie werden benutzt, um sich innerhalb der Datei zu bewegen. Manche commands erwarten keine range.

Die wichtigsten Commands:

d - delete - löschen
y - yank - in den zwischenspeicher kopieren
yw - Wort kopieren
yy - Zeile kopieren
3yy - 3 Zeilen kopieren
p - vorher Kopiertes einfügen (put | leichter zu merken ist "paste")
P - vorher Kopiertes *vor* dem Cursor einfügen
c - change - löschen, und danach in den insert-Modus wechseln
shift + J - fügt Zeilen zusammen

Die gebräuchlisten Ranges:

w - Wort vorwärts springen
b - Wort rückwärts springen

Beispiele:

w - Wort weiterspringen
dw - Wort löschen - command "delete", reichweite "Cursor bis Sprungende" (Wort) einfach zu merken mit "del word"
d2w - einmal zwei Worte löschen
2dw - zwei mal ein Wort löschen (gleiches ergebnis wie d2w)
10i- - 10 "-" einfügen (erst beim Wechsel in den command-Mode, da ja der ganze insert-Mode (i) 10 mal ausgeführt wird)

Das ist der grundsätzliche Aufbau, den man mit allen anderen Befehlen kombiniert.

Andere Nützlichkeiten im command-Mode:

. - letzes command wiederholen.
cw - Wort austauschen. Wie "dwi". "change word"
i - in den insert-Modus wechseln
I - in den insert-Modus wechseln und Cursor an den Anfang der Zeile positionieren. Kurz: Wenn man etwas am Anfang der Zeile einfügen will
a - append -> wenn man etwas hinter dem Cursor einfügen will
A - append -> wenn man etwas am Ende der Zeile einfügen will
o - open new line - Leerzeile anfügen + insert-Mode
O - open new line - Leerzeile einfügen + insert-Mode
ddp - aktuelle Zeile eins nach unten verschieben
xp - Buchstaben vertauschen 

Bewegen im command-mode / „range“-Befehle:

w - Wort weiter springen     
W - wie w, überspringt aber mehr (z.B. Kommas)
b - Wort zurück springen
B - wie b, überspringt aber mehr (z.B. Kommas)
e - springt bis zum Ende des Wortes unter dem Cursor
E - wie E, überspringt aber mehr (z.B. Kommas)
{ } - Absatz vor/zurück springen. Sehr praktisch in einer .rhosts!
0 - pos1
$ - ende
* - springt vorwärts zum nächsten Vorkommen des Wortes unter dem Cursor
# - springt rücwärts zum vorherigen Vorkommen des Wortes unter dem Cursor

Insert Mode:

Insert Modus - wenn unten „insert“ steht. Was man drueckt wird direkt eingefuegt. Verlassen mit ESC

Ex Mode:

:w <Datei> - Speichert es in einer neuen Datei
:e . - Eine andere Datei auf dem aktuellen Verzeichnis öffnen
:e /etc/passwd - Die Datei passwd öffnen
:r /etc/hosts - Den Inhalt der angegebenen Datei an die Cursorposition des offenen Dokuments einlesen
:tabnew - Neuen Tab erstellen
:tabnext - In den nächsten Tab springen
:tabclose - Tab schließen
:redo - Holt den Text wieder wenn ich zuviele undos gemacht habe

Suchen und ersetzen:

:1,60 - ersetzen von Reihe 1-60
:1,$ - ganzer Text (bis Textende)
:% - ganzer Text (ebenfalls bis Textende)
:.,+10 - von der Courser Position an Zehn Zeilen
:-5,10
:%s/bash$/sh/ - ersetzt bash wenn es am Ende steht durch sh
:%s/bash/sh/ - ersetzt bash durch sh, aber pro Zeile nur den ersten treffen
:%s/bash/sh/g - ersetzt bash durch sh, im ganzen Text, auch mehrmals pro Zeile wenn es vorkommt
:%s/bash/sh/gc - ersetzt bash druch sh, im ganzen Text, auch mehrmals pro Zeiel wenn es vorkommt und man wird gefragt ob man das ändern will
:%s/^a/A/ - ersetzt alle kleingeschrieben a am Anfang jeder Zeile durch ein A
:help <Befehl>
:syntax on - Syntax highlighting
:set number
:set nonumber
:set list - Steuerzeichen anzeigen
:set all - Zeigt alle Befehle an in Kombination mit set

Visual Mode:

neben den 3 standard-Modi hat vim noch den Visual mode. Er ist wie normales Markieren mit shift-Cursortasten und wählt einen Bereich aus, den man dann mit commands editieren kann.

v     normales markieren
V     zeilenweises markieren
^V    eckiges markieren (block mode)

Bsp: Block auskommentieren im Visual Mode:

Mit Strg-V in den Modus --VISUELL BLOCK-- wechseln.
Die Zeilen die auskommentiert werden sollen mit den Cursor Tasten markieren.
Mit Shift-I in den Einfüge Modus wechseln.
Das Kommentarzeichen (z.B. #) einfügen.
ESC drücken um aus dem Modus zu kommen.

Die Zeilen bekommen wie von Zauberhand das '#' Zeichen vorangestellt.

Bsp: Block entkommentieren im Visual Mode:

Mit Strg-V in den Modus --VISUELL BLOCK-- wechseln.
Die Zeilen die entkommentiert werden sollen mit den Cursor Tasten markieren.
Die Entf Taste drücken.
Fertig.

Alternative Editoren

Befehl SuSE Paket Debian Paket CentOS Paket Beschreibung
mcedit mc mc Teil vom Midnight Commander
nano

Dokus und Links

admin_grundlagen/vim.1452851112.txt.gz · Zuletzt geändert: 2016/01/15 09:45 von ingo_wichmann