vim – HowTo

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

Published by

voku

Lars Moelleken | Ich bin root, ich darf das!

%d bloggers like this: