This blog post has been published on 2010-01-31 and may be out of date.
Text suchen mit vi(m):
/Muster | sucht vorwärts nach dem eingegebenem Suchmuster |
/Muster/e | sucht vorwärts, springt jedoch an das Ende des gefundenen Wortes |
?Muster | sucht rückwärts nach dem eingegebenem Suchmuster |
n | die letzte Suche wird wiederholt (weiter suchen) |
? | wiederholt die Suche – rückwärts |
% | zeigt die zugehörige Klammer an |
v% | markiert den Text zwischen zugehörigen Klammern an |
Text ersetzen mit vi(m):
:s/alt/neu/ | ersetzen von alt durch neu (nur erstes Auftreten in aktueller Zeile) |
:s/alt/neu/c | ersetzen von alt durch neu (erste Auftreten + Nachfrage) |
:s/alt/neu/g | sucht und ersetzt alt durch neu in der ganzen Zeile |
:s/alt/neu/gc | sucht und ersetzt alt durch neu in der ganzen Zeile + Nachfrage |
:s/alt/&…/g | sucht und ersetzt alt durch alt… in der ganzen Zeile |
:1,7s/alt/neu/g | ersetzt von Zeile 1 bis 7 alt durch neu |
:%s/alt/neu/g | ersetzt im ganzen Dokument alt durch neu |
:%s/alt/neu/gc | ersetzt im ganzen Dokument alt durch neu + Nachfrage |
:%s/\<alt\>/neu/g | ersetzt im ganzen Dokument nur “exakt” das Wort alt durch neu |
:s/\<alt\>.*// | “exakt” das Wort alt und den folgenden Text, bis zum Zeilenende löschen |
:%s/alt.\{2}/neu/g | ersetzt im ganzen Dokument nur altXX, wobei X jeweils ein beliebiges Zeichen ist |
:%s/alt/neu/gci | ersetzt im ganzen Dokument alt durch neu + Nachfrage + Case insensitive |
:%s/alt/neu/gcI | ersetzt im ganzen Dokument alt durch neu + Nachfrage + Case sensitive |
:s/^/text/ | Text am Zeilenanfang einfügen |
:s/$/text/ | Text am Zeilenende einfügen |
:%s/Copyright \zs2007\ze All Rights Reserved/2008/ | “\zs” + “\ze” markieren den zu ersetzenden Bereich, des Such-Strings |
Info:
\t -> steht für einen Tab
\n -> Null Byte (0x00)
\r -> carriage return (^M)
\1 -> 1. backreference -> z.B.: \(.*\)
\2 -> 2. backreference … u.s.w.
Text löschen mit vi(m):
x (Entf) | ein Zeichen unter der Cursor-Position löschen |
r | Zeichen unter der Cursor-Position ersetzen |
dd | aktuelle Zeile ausschneiden (in Zwischenablage kopieren & löschen) |
[Anzahl]dd | die nächsten [Anzahl] Zeilen ausschneiden |
C | Zeile ab aktueller Cursor-Position löschen |
V | Zeile markieren |
<Strg> + v | Zeichen dynamisch markieren |
v | Zeichen markieren |
d | markierte Textstellen löschen bzw. ausschneiden |
cw | aktuelles Wort ersetzen |
dw | aktuelles Wort löschen (incl. angehängtem Leerzeichen) |
db | Vorhergehendes Wort löschen |
de | aktuelles Wort löschen (über Zeile hinaus) |
dl | Zeichen unter Cursor-Position löschen |
dj | zwei Zeilen löschen (Cursor-Position ist 1. Zeile) |
dk | zwei Zeilen löschen (Cursor-Position ist 2. Zeile) |
:5,10d | Zeilen 5 bis 10 löschen |
d$ | aktuelle Zeile ab dem Cursor löschen |
:.,$d | alle Zeilen löschen (“.” = Anfang der Datei, “$” = Ende der Datei) |
:v/./d | alle leeren Zeilen löschen |
Text kopieren mit vi(m):
Y oder yy | setzt die aktuelle Zeile in den Speicherpuffer (y – yank – herausziehen) |
y | markierte Textstellen in den Speicherpuffer |
ny | kopiert die nächsten n-Zeilen (n=Zahl) |
yw | kopiert ein Wort (rechts vom Cursor) |
nyw | kopiert n-Wört (rechts vom Cursor) (n=Zahl) |
yb | kopiert ein Wort (links vom Cursor) |
nyb | kopiert n-Wörter (links vom Cursor) (n=Zahl) |
“[a-z]y(Objekt) | speichert das angegebene Objekt in den Puffer [a-z]
z.B. “ayw ->Speichert das Wort, das nach dem Cursor steh, in den Puffer “a” |
“[a-z]p | fügt den Inhalt des Puffers [a-z] nach der Cursorposition ein
z.B. “ap ->fügt den Inhalt des Puffers “a” ein |
“np | fügt die n-te Speicherung/Löschung ein
z.B. “4p ->fügt nun die 4-letzte Speicherung/Löschung nach der Cursorposition ein |
xp | vertauscht 2 Buchstaben an der Cursorposition
z.B. wird aus “hc” <-> “ch” |
Text einfügen mit vi(m):
p | fügt die letzte Speicherung/Löschung an der Cursor-Position ein (p – paste – einfügen) |
P | Zwischenablage vor aktueller Zeile einfügen |
R | Text ab Cursor-Position überschreiben |
r | Zeichen Cursor-Position überschreiben |
J | aktuelle Zeile an das Ende der vorhergehenden Zeile anhängen |
o | fügt eine Zeile unterhalb des Cursors ein |
O | fügt eine Zeile oberhalb des Cursors ein |
a | Text einfügen, nach dem Cursor |
A | Text einfügen, am Zeilenende |
i | Text einfügen, vor dem Cursor |
I | Text einfügen, am Zeilenanfang |
cc | bis zur nächsten Zeilengrenze überschreiben |
:r DATEI | fügt eine DATEI hinter den aktuellen Zeile ein |
Navigieren mit vi(m):
G | an das Ende des Dokuments springen |
:n | springt zur n-Zeilennummer (n=Zahl) |
gg | an den Anfang des Dokuments springen |
5G | in die 5 Zeile des Dokuments springen |
0 (null) | an den Anfang der Zeile springen (für z.B. Putty besser) |
^ | an den Anfang der Zeile springen |
$ | an das Ende der Zeile springen |
b | an den Anfang des letzten Wortes springen |
w | an den Anfang des nächsten Wortes springen |
e | an das Ende des nächsten Wortes springen |
h (Pfeiltasten) | ein Zeichen nach links |
j (Pfeiltasten) | ein Zeile nach unten |
k (Pfeiltasten) | eine Zeile nach oben |
l (Pfeiltasten) | ein Zeichen nach rechts |
<Strg> + u (Bild oben Taste) | nach oben blättern |
<Strg> + d (Bild unten Taste) | nach unten blättern |
:split DATEI | teilt das Fenster in der Mitte, um zwei Dateien gleichzeitig zu bearbeiten |
:vsplit DATEI | teilt das Fenster vertikal, um zwei Dateien gleichzeitig zu bearbeiten |
<Strg> + W | um in den nächsten geteilten Bereich zu geladen |
:tabnew DATEI | öffnen einen neuen Tab in dem eine weitere Datei bearbeitet werden kann,
zudem ist der Buffer nun Datei-übergreifend verfügbar |
:tabnext | wechselt zum nächsten Tab ggf. “<Strg> + <Alt> + Bild hoch/runter” |
Speichern und / oder Schließen mit vi(m):
:q | vi beenden |
:q! | vi beenden, nicht gespeicherte Änderungen gehen verloren !!! |
:w | Datei speichern |
:w test.txt | Datei speichern als test.txt |
:w! | Speichern der Datei erzwingen |
:wq (oder) ZZ | Datei speichern und vi beenden |
<Strg> + z | Shell starten; vi wird in Hintergrund geschoben; Rückkehr durch Eingabe von “fg” |
Set-Befehle mit vi(m):
:set all | anzeigen aller Set-Befehle |
:se nu | Zeilennummern einblenden |
:set number | |
:se nonu | Zeilennummern ausblenden |
:set nonumber | |
:set list | Zeilenende markieren |
:set nolist | Zeilenende nicht markieren |
:set ic | ignoriert Groß-/ Kleinschreibung, bei der Suche |
:set ignorecase | |
:set noic | schaltet das ignorieren wieder ab |
:set noignorecase | |
:set hlsearch | hervorheben von Suchergebnissen |
:set nohls | hervorheben wieder abschalten |
:syntax on | hervorheben von Code, Konfiguration etc. |
:syntax off | Hervorhebung wieder abschalten |
:ab rtfm read the fucking manual | legt eine neue Abkürzung fest, aus “rtfm” wird nun automatisch “read the fucking manual” |
:ab | zeigt die verfügbaren Abkürzungen an |
:set incsearch | bei der Suche werden die Zeichenketten direkt angezeigt |
:set tabstop=n | gibt an aus wie vielen Leerzeichen ein Tab bestehen soll (n=Zahl) |
:set shiftwidth=n | gibt an wie viele Leerzeichen expandtab verwendet |
:set expandtab | es werden Leerzeichen anstatt Tabs verwenden |
:set noexpandtab | es werden Tabs anstelle von Leerzeichen verwendet |
:retab | existierende Tabs werden in Leerzeichen umgewandelt |
:set laststatus=2 | die untere Status-Leiste wird nun immer angezeigt |
:set backspace=2 | erlaubt die Backspace-Taste zum löschen im Schreib-Modus |
:noremap <Leader>c :%s://\(.*\):/*\1 */:<CR> | auf die Tastenkombination \c erfolgt die Änderungen von C++-Kommentaren (// test), in C-Kommentaren (/* test */) |
:noremap <Leader>C :%s:/\*\(.\{-\}\)\s*\*/://\1:<CR> | auf die Tastenkombination \C erfolgt die Änderungen von C-Kommentaren (/* test */), in C++-Kommentaren (// test) |
:nmap _Y :!echo “”> ~/.vi_tmp<CR><CR>:w! ~/.vi_tmp<CR>
:vmap _Y :w! ~/.vi_tmp<CR> :nmap _P :r ~/.vi_tmp<CR> |
diese drei Zeilen bewirken, dass man zwischen verschiedenen Vim-Sessions kopieren kann.
_Y -> kopieren _P -> einfügen |
Y oder yy
Info: Du kannst diese Befehle auch fest in der “~/.vimrc“-Datei eintragen !!!
Sonstiges mit vi(m):
u | UNDO der letzten Befehle |
U | alle Änderungen der aktuellen Zeile rückgängig machen |
<Strg> + r | REUNDO derletzten Befehle |
v | Bereich markieren |
<Strg> + v | Bereich dynamisch markieren |
. (ein Punkt) | Wiederholt das letzte Einfüg-/ Löschkommando |
<ESC> | Bearbeitungsmodus beenden |
:s/”/\”/g | Sonderzeichen müssen teilweise mit gekennzeichnet werden (ersetzt ” durch “) |
:jumps | zeigt die Dateien an, in denen man zuletzt gesucht, markiert etc. hat
(Dateien anschauen reicht nicht aus, so dass Dateien eingetragen werden) |
:for | erzeugt eine Schleife direkt im Editor
z.B. :for i in range(1,254) | put =’192.168.0.’.i | endfor |
:! | führt System-Befehle direkt im vim durch
z.B. “:!mkdir ~/vim” |
Y oder yy