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