Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung Nächste Überarbeitung Beide Seiten, nächste Überarbeitung | ||
admin_grundlagen:vim [2016/01/18 11:13] ingo_wichmann |
admin_grundlagen:vim [2016/09/16 08:16] ingo_wichmann |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== vi überleben ====== | ====== vi überleben ====== | ||
- | ^ Befehl ^ Funktion ^ | + | ^ Befehl ^ Funktion ^ |
| ''i'' | Einfügemodus (**i**nsert) | | | ''i'' | Einfügemodus (**i**nsert) | | ||
| ''<ESC>'' | Befehlsmodus | | | ''<ESC>'' | Befehlsmodus | | ||
Zeile 7: | Zeile 7: | ||
| '':q!'' | beenden ohne speichern | | | '':q!'' | beenden ohne speichern | | ||
| '':wq'' | speichern und beenden | | | '':wq'' | speichern und beenden | | ||
+ | | '':x'' |::: | | ||
| ''u'' | Rückgängig (**u**ndo) | | | ''u'' | Rückgängig (**u**ndo) | | ||
Zeile 22: | Zeile 23: | ||
===== Navigationsbefehle I ===== | ===== Navigationsbefehle I ===== | ||
{{:admin_grundlagen:adm-3a-hjkl-keyboard.jpg?200|}} | {{:admin_grundlagen:adm-3a-hjkl-keyboard.jpg?200|}} | ||
+ | |||
+ | Aufbau: [Anzahl] Befehl | ||
+ | |||
+ | Beispiel: ''10w'' (10 Wörter weiter springen) | ||
| ''w'' | ein Wort weiter (**w**ord) | | | ''w'' | ein Wort weiter (**w**ord) | | ||
Zeile 37: | Zeile 42: | ||
===== Änderungsbefehle I ===== | ===== Änderungsbefehle I ===== | ||
+ | Aufbau: [''Anzahl''] ''Befehl'' ''Anwendungsbereich'' | ||
+ | |||
+ | ''Anzahl'' ist dabei optional. Es gibt an, wie oft der ''Befehl'' | ||
+ | ausgeführt werden soll. Mit ''Anwendungsbereich'' bezeichne ich Navigationsbefehle. Sie werden benutzt, um sich innerhalb | ||
+ | der Datei zu bewegen. Manche Befehle erwarten keinen Anwendungsbereich. | ||
+ | |||
+ | Beispiel: ''cwERSATZTEXT'' (Text bis zum nächster Wort durch ERSATZTEXT ersetzen) | ||
+ | |||
^ c… ^ ersetzen (**c**hange) ^ | ^ c… ^ ersetzen (**c**hange) ^ | ||
- | | cw | Wort ersetzen (change word) | | + | | ''cw'' | Wort ersetzen (change word) | |
- | | cc | Zeile ersetzen | | + | | ''cc'' | Zeile ersetzen | |
- | | C | bis zum Ende der Zeile ersetzen | | + | | ''C'' | bis zum Ende der Zeile ersetzen | |
- | ^ ^ ^ | + | |
+ | ^ ^ ^ | ||
| . | letzten Befehl wiederholen | | | . | letzten Befehl wiederholen | | ||
Zeile 47: | Zeile 61: | ||
| / | suchen | | | / | suchen | | ||
|.. Suchwort eingeben .. || | |.. Suchwort eingeben .. || | ||
- | | cw | 1 Wort ersetzen | | + | | ''cw'' | 1 Wort ersetzen | |
|.. Ersatzwort eingeben ..|| | |.. Ersatzwort eingeben ..|| | ||
- | | <ESC> | Änderung beenden | | + | | ''<ESC>'' | Änderung beenden | |
- | | n | zum nächsten Treffer springen | | + | | ''n'' | zum nächsten Treffer springen | |
- | | . | Ersetzung wiederholen | | + | | ''.'' | Ersetzung wiederholen | |
==== copy & paste ==== | ==== copy & paste ==== | ||
^ d… ^ ausschneiden (**d**elete) ^ | ^ d… ^ ausschneiden (**d**elete) ^ | ||
- | | dw | Wort ausschneiden (delete word) | | + | | ''dw'' | Wort ausschneiden (delete word) | |
- | | dd | Zeile ausschneiden | | + | | ''dd'' | Zeile ausschneiden | |
- | | dj | Zeile und nächste Zeile ausschneiden | | + | | ''D'' | bis zum Ende der Zeile ausschneiden | |
- | | dk | Zeile und vorherige Zeile ausschneiden | | + | |
- | | D | bis zum Ende der Zeile ausschneiden | | + | |
^ y… ^ kopieren (**y**ank) ^ | ^ y… ^ kopieren (**y**ank) ^ | ||
- | | yw | Wort kopieren | | + | | ''yw'' | Wort kopieren | |
- | | yy | Zeile kopieren | | + | | ''yy'' | Zeile kopieren | |
- | | Y | bis zum Ende der Zeile kopieren | | + | | ''Y'' | bis zum Ende der Zeile kopieren | |
^ ^ einfügen (**p**aste)^ | ^ ^ einfügen (**p**aste)^ | ||
- | | P | an aktueller Position einfügen | | + | | ''P'' | an aktueller Position einfügen | |
- | | p | nach aktueller Position einfügen | | + | | ''p'' | nach aktueller Position einfügen | |
===== Visueller Modus ===== | ===== Visueller Modus ===== | ||
- | | v | Visueller Modus | | + | | ''v'' | Visueller Modus | |
- | | V | Visueller Modus, zeilenweise | | + | | ''V'' | Visueller Modus, zeilenweise | |
- | | Strg+v | Visueller Modus, blockweise | | + | | ''Strg+v'' | Visueller Modus, blockweise | |
==== Anwendungsbeispiel: suchen und ersetzen II ==== | ==== Anwendungsbeispiel: suchen und ersetzen II ==== | ||
- | | / | suchen | | + | | ''/'' | suchen | |
|.. Suchwort eingeben .. || | |.. Suchwort eingeben .. || | ||
- | | vwc | 1 Wort ersetzen | | + | | ''vwc'' | 1 Wort ersetzen | |
|.. Ersatzwort eingeben ..|| | |.. Ersatzwort eingeben ..|| | ||
- | | <ESC> | Änderung beenden | | + | | ''<ESC>'' | Änderung beenden | |
- | | n | zum nächsten Treffer springen | | + | | ''n'' | zum nächsten Treffer springen | |
- | | . | Ersetzung wiederholen | | + | | ''.'' | Ersetzung wiederholen | |
+ | |||
+ | ==== Text Markieren ==== | ||
+ | | ''vip'' | aktuellen Absatz markieren | | ||
+ | | ''vap'' | aktuellen Absatz inklusive Leerzeilen außenrum markieren | | ||
+ | | ''vit'' | Text innerhalb des aktuellen xml-Tags markieren | | ||
+ | | ''vat'' | Text um das aktuelle xml-Tag markieren | | ||
+ | | ''vi('' | Text innerhalb der (Klammern) markieren | | ||
+ | | ''va('' | Text inklusive der (Klammern) markieren | | ||
+ | | ''vi{'' | Text innerhalb der {Klammern} markieren | | ||
+ | | ''vi{'' | Text inklusive der {Klammern} markieren | | ||
+ | | ''vi['' | Text innerhalb der [Klammern] markieren | | ||
+ | | ''va['' | Text inklusive der [Klammern] markieren | | ||
+ | |||
+ | ===== weitere Wege in den Einfügemodus ===== | ||
+ | | ''i'' | an der aktuellen Position| | ||
+ | | ''I'' | am Zeilen- bzw. Blockanfang | | ||
+ | | ''a'' | hinter der aktuellen Position| | ||
+ | | ''A'' | am Zeilen- bzw. Blockende | | ||
+ | | ''o'' | neue Zeile darunter einfügen| | ||
+ | | ''O'' | neue Zeile darüber einfügen| | ||
====== Beispiel Texte ====== | ====== Beispiel Texte ====== | ||
- | [[vim beispiel texte]] zum Üben | + | [[admin_grundlagen:vim beispiel texte]] zum Üben |
- | ====== Fortgeschrittene Befehle ====== | + | ====== Suchen und Ersetzen III ====== |
- | | Befehl | Funktion | | + | ^ Befehl ^ Funktion ^ |
- | | ZZ | speichern & verlassen | | + | | '':%s/suchwort/ersatz/g'' | suchen und ersetzen (**s**ubstitute, **g**lobal) | |
- | | :x | speichern & verlassen | | + | | '':g/^$/d'' | Alle Leerzeilen löschen | |
- | + | ||
- | ===== Suchen und Ersetzen III ===== | + | |
- | ^ Befehl ^ Funktion ^ | + | |
- | | '':%s/suchwort/ersatz/g'' | suchen und ersetzen, mit Bestätigung | | + | |
- | | '':g/^$/d'' | Alle Leerzeilen löschen | | + | |
- | ===== Dateinamen-Ergänzung a la Tab-Taste ===== | + | ====== Eingabehilfen im Einfügemodus ====== |
- | Im Einfügemodus: | + | | ''Strg+n'' | Wort-Ergänzung | |
- | Strg+x f | + | | ''Strg+x'' ''f'' | Dateinamen-Ergänzung a la Tab-Taste | Mehr dazu: [[ http://vimdoc.sourceforge.net/htmldoc/insert.html#ins-completion | vim.org Dokumentation ]] |
- | Mehr dazu: [[ http://vimdoc.sourceforge.net/htmldoc/insert.html#ins-completion | vim.org Dokumentation ]] | + | |
- | ===== Mehrere Dateien bearbeiten ===== | + | ====== Mehrere Dateien bearbeiten ====== |
|''vi -o file1 file2'' |horizontaler Split\\ (Fenster wechseln mit ''Ctrl+W Cursortaste'') | | |''vi -o file1 file2'' |horizontaler Split\\ (Fenster wechseln mit ''Ctrl+W Cursortaste'') | | ||
|''vi -O file1 file2'' |vertikaler Split (Dateien nebeneinander) | | |''vi -O file1 file2'' |vertikaler Split (Dateien nebeneinander) | | ||
|''vi -p file1 file2'' |Tab-Modus\\ (Dateitabs wechseln mit ''g'' ''t'' (__g__o__t__o) - ''T'' für rückwärts | | |''vi -p file1 file2'' |Tab-Modus\\ (Dateitabs wechseln mit ''g'' ''t'' (__g__o__t__o) - ''T'' für rückwärts | | ||
+ | |||
+ | ====== Einstellungen ====== | ||
+ | ===== Groß-/Kleinschreibung beim Suchen ignorieren ===== | ||
+ | :set ignorecase | ||
===== Konfigurationsdateien ohne Kommentare anzeigen ===== | ===== Konfigurationsdateien ohne Kommentare anzeigen ===== | ||
Zeile 109: | Zeile 139: | ||
:set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0 | :set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0 | ||
- | ====== Navigationsbefehle II ====== | + | ===== Syntax-Highlighting einschalten ===== |
- | | { | zum nächsten Absatz | | + | :syntax on |
- | | } | zum vorherigen Absatz | | + | |
- | + | ||
- | ====== Nützliche Informationen und Befehle ====== | + | |
- | Vim öffnen: | + | |
- | + | ||
- | vim <Datei> - öffnet eine leere Datei mit dem Namen welche ich beim Öffnen angegeben habe | + | |
- | vim + <Zeilennummer> + <Datei> - öffnet eine leere Datei mit dem Namen welchen ich angegeben habe und springt in die angegebene Zeile | + | |
- | vim . - Ich kann mit die Datei aussuchen welche ich öffnen will. Durch den Punkt werden die Dateien aus dem aktuellen Verzeichnis angezeigt | + | |
- | + | ||
- | Modi: | + | |
- | + | ||
- | - Command/normal Mode | + | |
- | - Insert Mode (zum normalen Schreiben) | + | |
- | - Ex Mode (das was man kriegt, wenn man im command-Mode ":" drückt) | + | |
- | - Visual Mode | + | |
- | + | ||
- | + | ||
- | Command Mode: | + | |
- | + | ||
- | Im command-Mode haben Befehle den folgenden Aufbau: | + | |
- | + | ||
- | [count][command][range] | + | |
- | + | ||
- | oder | + | |
- | + | ||
- | [command][count][range] | + | |
- | + | ||
- | [count] ist Dabei optional. Es gibt an, wie oft [command] oder [range] | + | |
- | ausgeführt werden soll. | + | |
- | + | ||
- | Mit "range" bezeichne ich Sprungbefehle. Sie werden benutzt, um sich innerhalb | + | |
- | der Datei zu bewegen. Manche commands erwarten keine range. | + | |
- | + | ||
- | Die wichtigsten Commands: | + | |
- | + | ||
- | d - delete - löschen | + | |
- | y - yank - in den zwischenspeicher kopieren | + | |
- | yw - Wort kopieren | + | |
- | yy - Zeile kopieren | + | |
- | 3yy - 3 Zeilen kopieren | + | |
- | p - vorher Kopiertes einfügen (put | leichter zu merken ist "paste") | + | |
- | P - vorher Kopiertes *vor* dem Cursor einfügen | + | |
- | c - change - löschen, und danach in den insert-Modus wechseln | + | |
- | shift + J - fügt Zeilen zusammen | + | |
- | + | ||
- | Die gebräuchlisten Ranges: | + | |
- | + | ||
- | w - Wort vorwärts springen | + | |
- | b - Wort rückwärts springen | + | |
- | + | ||
- | Beispiele: | + | |
- | + | ||
- | w - Wort weiterspringen | + | |
- | dw - Wort löschen - command "delete", reichweite "Cursor bis Sprungende" (Wort) einfach zu merken mit "del word" | + | |
- | d2w - einmal zwei Worte löschen | + | |
- | 2dw - zwei mal ein Wort löschen (gleiches ergebnis wie d2w) | + | |
- | 10i- - 10 "-" einfügen (erst beim Wechsel in den command-Mode, da ja der ganze insert-Mode (i) 10 mal ausgeführt wird) | + | |
- | + | ||
- | Das ist der grundsätzliche Aufbau, den man mit allen anderen Befehlen | + | |
- | kombiniert. | + | |
- | + | ||
- | Andere Nützlichkeiten im command-Mode: | + | |
- | + | ||
- | . - letzes command wiederholen. | + | |
- | cw - Wort austauschen. Wie "dwi". "change word" | + | |
- | i - in den insert-Modus wechseln | + | |
- | I - in den insert-Modus wechseln und Cursor an den Anfang der Zeile positionieren. Kurz: Wenn man etwas am Anfang der Zeile einfügen will | + | |
- | a - append -> wenn man etwas hinter dem Cursor einfügen will | + | |
- | A - append -> wenn man etwas am Ende der Zeile einfügen will | + | |
- | o - open new line - Leerzeile anfügen + insert-Mode | + | |
- | O - open new line - Leerzeile einfügen + insert-Mode | + | |
- | ddp - aktuelle Zeile eins nach unten verschieben | + | |
- | xp - Buchstaben vertauschen | + | |
- | + | ||
- | Bewegen im command-mode / "range"-Befehle: | + | |
- | + | ||
- | w - Wort weiter springen | + | |
- | W - wie w, überspringt aber mehr (z.B. Kommas) | + | |
- | b - Wort zurück springen | + | |
- | B - wie b, überspringt aber mehr (z.B. Kommas) | + | |
- | e - springt bis zum Ende des Wortes unter dem Cursor | + | |
- | E - wie E, überspringt aber mehr (z.B. Kommas) | + | |
- | { } - Absatz vor/zurück springen. Sehr praktisch in einer .rhosts! | + | |
- | 0 - pos1 | + | |
- | $ - ende | + | |
- | * - springt vorwärts zum nächsten Vorkommen des Wortes unter dem Cursor | + | |
- | # - springt rücwärts zum vorherigen Vorkommen des Wortes unter dem Cursor | + | |
- | + | ||
- | Insert Mode: | + | |
- | + | ||
- | Insert Modus - wenn unten "insert" steht. Was man drueckt wird direkt eingefuegt. Verlassen mit ESC | + | |
- | + | ||
- | Ex Mode: | + | |
- | + | ||
- | :w <Datei> - Speichert es in einer neuen Datei | + | |
- | :e . - Eine andere Datei auf dem aktuellen Verzeichnis öffnen | + | |
- | :e /etc/passwd - Die Datei passwd öffnen | + | |
- | :r /etc/hosts - Den Inhalt der angegebenen Datei an die Cursorposition des offenen Dokuments einlesen | + | |
- | :tabnew - Neuen Tab erstellen | + | |
- | :tabnext - In den nächsten Tab springen | + | |
- | :tabclose - Tab schließen | + | |
- | :redo - Holt den Text wieder wenn ich zuviele undos gemacht habe | + | |
- | + | ||
- | Suchen und ersetzen: | + | |
- | + | ||
- | :1,60 - ersetzen von Reihe 1-60 | + | |
- | :1,$ - ganzer Text (bis Textende) | + | |
- | :% - ganzer Text (ebenfalls bis Textende) | + | |
- | :.,+10 - von der Courser Position an Zehn Zeilen | + | |
- | :-5,10 | + | |
- | + | ||
- | :%s/bash$/sh/ - ersetzt bash wenn es am Ende steht durch sh | + | |
- | :%s/bash/sh/ - ersetzt bash durch sh, aber pro Zeile nur den ersten treffen | + | |
- | :%s/bash/sh/g - ersetzt bash durch sh, im ganzen Text, auch mehrmals pro Zeile wenn es vorkommt | + | |
- | :%s/bash/sh/gc - ersetzt bash druch sh, im ganzen Text, auch mehrmals pro Zeiel wenn es vorkommt und man wird gefragt ob man das ändern will | + | |
- | + | ||
- | :%s/^a/A/ - ersetzt alle kleingeschrieben a am Anfang jeder Zeile durch ein A | + | |
- | :help <Befehl> | + | ===== Zeilennummern ein-/ausschalten ===== |
- | :syntax on - Syntax highlighting | + | |
:set number | :set number | ||
:set nonumber | :set nonumber | ||
- | :set list - Steuerzeichen anzeigen | ||
- | :set all - Zeigt alle Befehle an in Kombination mit set | ||
- | Visual Mode: | + | ===== Steuerzeichen anzeigen ===== |
+ | :set list | ||
- | neben den 3 standard-Modi hat vim noch den Visual mode. Er ist wie normales | + | ====== Navigationsbefehle II ====== |
- | Markieren mit shift-Cursortasten und wählt einen Bereich aus, den man dann mit | + | | { | zum nächsten Absatz | |
- | commands editieren kann. | + | | } | zum vorherigen Absatz | |
+ | | * | | | ||
+ | | # | | | ||
- | v normales markieren | + | ====== Weitere Informationen und Befehle ====== |
- | V zeilenweises markieren | + | Modi: |
- | ^V eckiges markieren (block mode) | + | |
- | Bsp: Block auskommentieren im Visual Mode: | + | * Command/normal Mode |
+ | * Insert Mode (zum normalen Schreiben) | ||
+ | * Ex Mode (das was man kriegt, wenn man im command-Mode ":" drückt) | ||
+ | * Visual Mode | ||
- | Mit Strg-V in den Modus --VISUELL BLOCK-- wechseln. | + | ===== Ex Mode ===== |
- | Die Zeilen die auskommentiert werden sollen mit den Cursor Tasten markieren. | + | |
- | Mit Shift-I in den Einfüge Modus wechseln. | + | |
- | Das Kommentarzeichen (z.B. #) einfügen. | + | |
- | ESC drücken um aus dem Modus zu kommen. | + | |
- | Die Zeilen bekommen wie von Zauberhand das '#' Zeichen vorangestellt. | + | |
- | + | ||
- | Bsp: Block entkommentieren im Visual Mode: | + | |
- | + | ||
- | Mit Strg-V in den Modus --VISUELL BLOCK-- wechseln. | + | |
- | Die Zeilen die entkommentiert werden sollen mit den Cursor Tasten markieren. | + | |
- | Die Entf Taste drücken. | + | |
- | Fertig. | + | |
+ | ^ Befehl ^ Funktion ^ | ||
+ | | ZZ | speichern & verlassen | | ||
+ | | :x | speichern & verlassen | | ||
+ | | :w <Datei> | Speichert es in einer neuen Datei| | ||
+ | | :e . | Eine andere Datei auf dem aktuellen Verzeichnis öffnen| | ||
+ | | :e /etc/passwd | Die Datei passwd öffnen| | ||
+ | | :r /etc/hosts | Den Inhalt der angegebenen Datei an die Cursorposition des offenen Dokuments einlesen| | ||
+ | | :tabnew | Neuen Tab erstellen| | ||
+ | | :tabnext | In den nächsten Tab springen| | ||
+ | | :tabclose | Tab schließen| | ||
+ | | :redo | Holt den Text wieder wenn ich zuviele undos gemacht habe| | ||
+ | || | ||
+ | | :help <Befehl>| | ||
+ | | :set all | Zeigt alle Befehle an in Kombination mit set| | ||
====== Alternative Editoren ====== | ====== Alternative Editoren ====== | ||
Zeile 267: | Zeile 184: | ||
| mcedit | mc | mc | | Teil vom Midnight Commander | | | mcedit | mc | mc | | Teil vom Midnight Commander | | ||
| nano | | | | | | | nano | | | | | | ||
- | |||
- | |||
====== Dokus und Links ===== | ====== Dokus und Links ===== |