Vi-Grundkurs
Zur Navigation springen
Zur Suche springen
Zielsetzung
vi ist ein mächtiger Editor, der auf jedem Linuxsystem verfügbar ist und in einem Terminal genutzt werden kann.
In diesem Kurs wird der Umgang mit diesem Editor geübt.
Aufruf
vi info.txt
- Wenn die Datei info.txt noch nicht existiert, wird eine Datei erzeugt.
- Sonst wird die Datei geöffnet.
# Öffnen der Datei /etc/hosts und Positionieren auf Zeile 25
vi /etc/hosts +25
# Öffnen der Datei /etc/passwd und Suche nach "www-data"
vi /etc/passwd +/www-data
Unterschied zu GUI-Editoren
vi kennt drei Verwendungsarten:
- den Visual-Mode: in diesem Fall führen Buchstaben Kommandos aus.
- den Insert-Mode: in diesem Fall werden die Eingaben in die Datei geschrieben (wie bei GUI-Editoren gewohnt).
- der Kommando-Modus: Es werden Kommandos wie im Terminal ausgeführt
Der Visual-Mode ist gewöhnungsbedürftig, aber extrem mächtig: Er erlaubt unglaublich schnell, bestimmte Teile der Datei zu erreichen.
Übung 1: vi starten und beenden
# Datei erzeugen, mit der wir arbeiten:
lscpu > cpu.info
# Datei öffnen:
vi cpu.info
- Wir sehen den Dateiinhalt.
- Wir beenden vi, ohne Änderungen zu speichern: Quit
:q
- Wir beenden vi und speichern die Änderungen: Write Quit
:wq
Wechsel der Betriebsarten
- Normalerweise ist der Visual-Mode aktiv.
- Befehlsmodus starten: ":"
- Befehlsmodus beenden: Nach Eingabe eines Befehls wird automatisch in den Visual-Mode umgeschaltet.
- Einfügemodus betreten: siehe unten: i(nsert) a(ppend) I(nsert line) A(ppend line)
- Einfügemodus beenden: ESC
- Datei öffnen:
vi cpu.info
- " " (Leerzeichen): bewegt ein Zeichen nach rechts
- "h" bewegt ein Zeichen nach links
- "w" bewegt ein Wort vorwärts
- "b" ein Wort rückwärts
- "^ " an den Anfang der Zeile (nach Leerzeichen)
- "0" an den Anfang der Zeile
- "$" an das Ende der Zeile
- "j": eine Zeile nach unten
- "k": eine Zeile nach oben
- "35G": Gehe nach Zeile 35
- "G": Gehe ans Dateiende
- "1G": Gehe an den Dateianfang
Suchkommandos
- "fX" Suche vorwärts nach dem nächsten X. X kann ein beliebiges Zeichen sein. Die Suche wirkt nur auf die aktuelle Zeile.
- "FX" Suche Rückwärts nach dem nächsten X. X kann ein beliebiges Zeichen sein. Die Suche wirkt nur auf die aktuelle Zeile.
- "/irgendwas" Suche vorwärts nach "irgendwas".
- "?irgendwas" Suche rückwärts nach "irgendwas".
Texte einfügen
Um Texte einzufügen, muss man vom Visual-Mode in den Insert-Mode wechseln:
- "i": Einfügen an der Cursorposition.
- "I": Einfügen am Zeilenanfang.
- "a": Einfügen hinter der Cursorposition
- "A": Einfügen in der nächsten Zeile.
Einfügemodus beenden
- Der Insertmodus wird mit ESC (Taste links oben) beendet.
Texte ändern
- "rX" (Replace): das Zeichen an der Cursorstelle wird zu X (X ist beliebiges Zeichen)
- "cw" (Change word): Es erscheint ein '$'-Zeichen, das das Wortende anzeigt. Jetzt den Ersatz eintippen und ESC drücken
- "c$" (Change to end of line): wie cw, nur dass bis zum Zeilenende ersetzt wird.
- "dw" (Delete word): löscht das Wort am Cursor
- "dd" (Delete Delete): löscht die aktuelle Zeile
Sollen mehrere Stellen im Text ersetzt werden, geht das im Kommandomodus:
- Kommandomodus erreichen: ":"
s/Hans/Udo/
Ersetze einmal "Hans" durch "Udo" in der aktuellen Zeiles/Hans/Udo/g
Ersetze alle "Hans" durch "Udo" in der aktuellen Zeile. (Global)%s/Hans/Udo/g
Ersetze alle "Hans" durch "Udo" in allen Zeilen. (Global)1,25s/Hans/Udo/g
Ersetze alle "Hans" in Zeile 1 bis 25..,$s/Hans/Udo/g
Ersetze alle "Hans" in aktuellen Zeile (".") bis zum Dateiende ("$").,.+9s/Hans/Udo/g
Ersetze alle "Hans" in aktuellen Zeile (".") und in den nächsten 9 Zeilen
Kommando wiederholen (im Visual-Mode)
Wird eine Zahl einem Kommando vorausgestellt, dann wird das Kommando sooft ausgeführt.
80
(80 Blank): gehe 80 Zeichen nach rechts3dd
Löschen 3 Zeilen44G
Gehe nach Zeile 4420j
Gehe 20 Zeilen abwärts
Praktisches
# Zeige alle Zeilennummern an :set nu # Verstecke alle Zeilennummern :set nonu # Bei Suchmustern Gross-/Kleinschreibung ignorieren :ic # Ignoriere obiges :noic