Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
admin_grundlagen:vim [2016/01/18 11:13] ingo_wichmann |
admin_grundlagen:vim [2022/09/28 14:25] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== vi überleben ====== | ||
- | ^ Befehl ^ Funktion ^ | ||
- | | ''i'' | Einfügemodus (**i**nsert) | | ||
- | | ''<ESC>'' | Befehlsmodus | | ||
- | | '':w'' | speichern (**w**rite) | | ||
- | | '':q'' | beenden (**q**uit) | | ||
- | | '':q!'' | beenden ohne speichern | | ||
- | | '':wq'' | speichern und beenden | | ||
- | |||
- | | ''u'' | Rückgängig (**u**ndo) | | ||
- | | ''Strg+r'' | undo Wiederherstellen (**r**edo) | | ||
- | |||
- | In älteren Vim-Versionen nützlich: | ||
- | | ''J'' | hängt die nächste Zeile an das Ende der aktuellen Zeile an (**j**oin) | | ||
- | |||
- | ====== VIM lernen ====== | ||
- | * mit einem Browser-Spiel: http://vim-adventures.com/ | ||
- | * mit vimtutor: | ||
- | vimtutor | ||
- | |||
- | ====== Grundlagen ====== | ||
- | ===== Navigationsbefehle I ===== | ||
- | {{:admin_grundlagen:adm-3a-hjkl-keyboard.jpg?200|}} | ||
- | |||
- | | ''w'' | ein Wort weiter (**w**ord) | | ||
- | | ''b'' | ein Wort zurück (**b**ack) | | ||
- | | ''e'' | zum nächsten Wortende (**e**nd)| | ||
- | | ''0'' | zum Zeilenanfang | | ||
- | | ''$'' | zum Zeileneinde | | ||
- | | ''gg'' | Dateianfang (**g**o) | | ||
- | | ''10gg'' | Zeile 10 | | ||
- | | ''G'' | letzte Zeile | | ||
- | | ''/'' | Vorwärts suchen | | ||
- | | ''?'' | Rückwärts suchen | | ||
- | | ''n'' | Zum nächsten Treffer in gleicher Richtung springen (**n**ext)| | ||
- | | ''N'' | Zum nächsten Treffer in entgegengesetzter Richtung springen | | ||
- | |||
- | ===== Änderungsbefehle I ===== | ||
- | ^ c… ^ ersetzen (**c**hange) ^ | ||
- | | cw | Wort ersetzen (change word) | | ||
- | | cc | Zeile ersetzen | | ||
- | | C | bis zum Ende der Zeile ersetzen | | ||
- | ^ ^ ^ | ||
- | | . | letzten Befehl wiederholen | | ||
- | |||
- | ==== Anwendungsbeispiel: suchen und ersetzen I ==== | ||
- | | / | suchen | | ||
- | |.. Suchwort eingeben .. || | ||
- | | cw | 1 Wort ersetzen | | ||
- | |.. Ersatzwort eingeben ..|| | ||
- | | <ESC> | Änderung beenden | | ||
- | | n | zum nächsten Treffer springen | | ||
- | | . | Ersetzung wiederholen | | ||
- | |||
- | ==== copy & paste ==== | ||
- | ^ d… ^ ausschneiden (**d**elete) ^ | ||
- | | dw | Wort ausschneiden (delete word) | | ||
- | | dd | Zeile ausschneiden | | ||
- | | dj | Zeile und nächste Zeile ausschneiden | | ||
- | | dk | Zeile und vorherige Zeile ausschneiden | | ||
- | | D | bis zum Ende der Zeile ausschneiden | | ||
- | ^ y… ^ kopieren (**y**ank) ^ | ||
- | | yw | Wort kopieren | | ||
- | | yy | Zeile kopieren | | ||
- | | Y | bis zum Ende der Zeile kopieren | | ||
- | ^ ^ einfügen (**p**aste)^ | ||
- | | P | an aktueller Position einfügen | | ||
- | | p | nach aktueller Position einfügen | | ||
- | |||
- | ===== Visueller Modus ===== | ||
- | | v | Visueller Modus | | ||
- | | V | Visueller Modus, zeilenweise | | ||
- | | Strg+v | Visueller Modus, blockweise | | ||
- | |||
- | ==== Anwendungsbeispiel: suchen und ersetzen II ==== | ||
- | | / | suchen | | ||
- | |.. Suchwort eingeben .. || | ||
- | | vwc | 1 Wort ersetzen | | ||
- | |.. Ersatzwort eingeben ..|| | ||
- | | <ESC> | Änderung beenden | | ||
- | | n | zum nächsten Treffer springen | | ||
- | | . | Ersetzung wiederholen | | ||
- | |||
- | ====== Beispiel Texte ====== | ||
- | [[vim beispiel texte]] zum Üben | ||
- | |||
- | ====== Fortgeschrittene Befehle ====== | ||
- | | Befehl | Funktion | | ||
- | | ZZ | speichern & verlassen | | ||
- | | :x | speichern & verlassen | | ||
- | |||
- | ===== 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 ===== | ||
- | Im Einfügemodus: | ||
- | Strg+x f | ||
- | Mehr dazu: [[ http://vimdoc.sourceforge.net/htmldoc/insert.html#ins-completion | vim.org Dokumentation ]] | ||
- | |||
- | ===== Mehrere Dateien bearbeiten ===== | ||
- | |''vi -o file1 file2'' |horizontaler Split\\ (Fenster wechseln mit ''Ctrl+W Cursortaste'') | | ||
- | |''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 | | ||
- | |||
- | ===== Konfigurationsdateien ohne Kommentare anzeigen ===== | ||
- | :set fdm=expr | ||
- | :set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0 | ||
- | |||
- | ====== Navigationsbefehle II ====== | ||
- | | { | zum nächsten Absatz | | ||
- | | } | 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> | ||
- | :syntax on - Syntax highlighting | ||
- | :set number | ||
- | :set nonumber | ||
- | :set list - Steuerzeichen anzeigen | ||
- | :set all - Zeigt alle Befehle an in Kombination mit set | ||
- | |||
- | Visual Mode: | ||
- | |||
- | neben den 3 standard-Modi hat vim noch den Visual mode. Er ist wie normales | ||
- | Markieren mit shift-Cursortasten und wählt einen Bereich aus, den man dann mit | ||
- | commands editieren kann. | ||
- | |||
- | v normales markieren | ||
- | V zeilenweises markieren | ||
- | ^V eckiges markieren (block mode) | ||
- | |||
- | Bsp: Block auskommentieren im Visual Mode: | ||
- | |||
- | Mit Strg-V in den Modus --VISUELL BLOCK-- wechseln. | ||
- | 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. | ||
- | |||
- | |||
- | ====== Alternative Editoren ====== | ||
- | | Befehl | SuSE Paket | Debian Paket | CentOS Paket | Beschreibung | | ||
- | | mcedit | mc | mc | | Teil vom Midnight Commander | | ||
- | | nano | | | | | | ||
- | |||
- | |||
- | |||
- | ====== Dokus und Links ===== | ||
- | |||
- | * [[http://www.debian-administration.org/article/Hiding_comments_in_configuration_files]] | ||
- | * [[https://blog.interlinked.org/tutorials/vim_tutorial.html|Tutorial mit Graphiken zur Navigation]] | ||
- | * Interview mit Bill Joy über die Entstehung von "vi" [[http://web.cecs.pdx.edu/~kirkenda/joy84.html]] | ||
- | * {{:vi-vim-cheat-sheet.gif|http://www.viemu.com/vi-vim-cheat-sheet.gif}} | ||
- | |||