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