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 | 
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” | 
 
	

