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


