VI Crash: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
Zeile 1: Zeile 1:
== Der VI besitzt 3 Hauptmodi ==
+
== Die 4 Modi ==
* '''Normalmodus''' (Normal Mode) 
 
Navigation und Bearbeitung von Text im Standardmodus.
 
  
* '''Einfügemodus''' (Insert Mode) 
+
{| class="wikitable"
Text eingeben und bearbeiten.
+
! Modus !! Aktivieren !! Verlassen
 +
|-
 +
| '''Normalmodus''' || Standardmodus beim Öffnen || —
 +
|-
 +
| '''Einfügemodus''' || <code>i</code> vor Cursor, <code>a</code> nach Cursor, <code>o</code> neue Zeile unten, <code>O</code> neue Zeile oben || <code>ESC</code>
 +
|-
 +
| '''Visueller Modus''' || <code>v</code> zeichenweise, <code>V</code> zeilenweise, <code>Ctrl+v</code> Blockauswahl || <code>ESC</code>
 +
|-
 +
| '''Befehlszeilenmodus''' || <code>:</code> Befehl, <code>/</code> Suche vorwärts, <code>?</code> Suche rückwärts || <code>ESC</code>
 +
|}
  
* '''Befehlszeilenmodus''' (Command-Line Mode) 
+
'''Merke:''' Immer mit <code>ESC</code> zurück in den Normalmodus.
Befehle wie Speichern, Beenden und Suchen ausführen.
 
  
 +
== Normalmodus ==
  
==Navigation (Auswahl)==
+
=== Navigation ===
<pre>
+
* <code>gg</code> – Anfang der Datei
Einfügemodus <- i,a,o... <- Normalmodus ->   :,/,?  -> Befehlszeilenmodus
+
* <code>G</code> – Ende der Datei
            ->   ESC  ->             <-    ESC  <-
+
* <code>:4</code> – Springe zu Zeile 4
</pre>
+
* <code>0</code> – Zeilenanfang
 +
* <code>$</code> – Zeilenende
 +
* <code>w</code> – Nächstes Wort
 +
* <code>b</code> – Vorheriges Wort
  
== Normalmodus (Auswahl) ==
+
=== Löschen ===
 +
* <code>dd</code> – Zeile löschen (in Register)
 +
* <code>3dd</code> – 3 Zeilen löschen
 +
* <code>dG</code> – Bis Dateiende löschen
 +
* <code>d0</code> – Bis Zeilenanfang löschen
 +
* <code>d$</code> – Bis Zeilenende löschen
 +
* <code>x</code> – Zeichen löschen
 +
* <code>3x</code> – 3 Zeichen löschen
  
* d löschen
+
=== Kopieren & Einfügen ===
** dd eine Zeile löschen und in ein Register schreiben
+
* <code>yy</code> – Zeile kopieren (yank)
** 3dd drei Zeilen löschen und in ein Register schreiben
+
* <code>3yy</code> – 3 Zeilen kopieren
** dG lösche ab der aktuellen Zeile bis zum Ende und in ein Register schreiben
+
* <code>yG</code> – Bis Dateiende kopieren
** d3G lösche ab der aktuellen Zeile bis zur Zeile 3 und in ein Register schreiben
+
* <code>y0</code> – Bis Zeilenanfang kopieren
** d0 bis zum Zeilenanfang löschen und in ein Register schreiben
+
* <code>y$</code> – Bis Zeilenende kopieren
** d$ bis zum Zeilenende löschen und in ein Register schreiben
+
* <code>p</code> – Einfügen nach Cursor
* y yanken
+
* <code>P</code> – Einfügen vor Cursor
** yy eine Zeile in ein Register schreiben
 
** 3yy drei Zeilen in ein Register schreiben
 
** yG ab der aktuellen Zeile bis zum Ende und in ein Register schreiben
 
** y5G ab der aktuellen Zeile bis zur Zeile 5 und in ein Register schreiben
 
** y0 bis zum Zeilenanfang in ein Register schreiben
 
** y$ bis zum Zeilenende in ein Register schreiben
 
* x Zeichen löschen
 
** 3x drei Zeichen löschen
 
* p paste füge ab der nächsten Zeile ein
 
* u undo
 
* /<Suchausdruck> suchen
 
** n weitersuchen
 
** N andere Richtung weitersuchen
 
  
== Befehlszeilenmodus (Auswahl) ==
+
=== Suchen ===
 +
* <code>/muster</code> – Vorwärts suchen
 +
* <code>?muster</code> – Rückwärts suchen
 +
* <code>n</code> – Nächster Treffer
 +
* <code>N</code> – Vorheriger Treffer
 +
* <code>*</code> – Wort unter Cursor suchen
  
* :w  schreiben der Datei
+
=== Sonstiges ===
* :w! schreiben der Datei übergehe Schreibschutz
+
* <code>u</code> – Rückgängig (undo)
* :q  beenden
+
* <code>Ctrl+r</code> – Wiederholen (redo)
* :q! forciert beenden
+
* <code>.</code> – Letzten Befehl wiederholen
* :wq! speichern und forciert beenden
+
* <code>r</code> – Einzelnes Zeichen ersetzen
* :e <datei> andere Datei öffnen
+
* <code>ZZ</code> – Speichern und beenden
* :e #  zu vorgehenden Datei zurückspringen
 
* :r<datei> datei an die aktuelle Stelle angefügt
 
* :sh kurzes verlassen - mit exit wieder in den vi
 
* :!<befehl> befehl wird ausgeführt
 
* :r!<befehl> befehl wird ausgeführt und an die aktuelle Stelle geschrieben
 
* :4 Cursor springt an vierte Zeile
 
* :$ Cursor springt an letzte Zeile
 
* :%s/muster/ersetzung/g
 
* Einstellungen
 
** :set ruler Koordinaten einstellung
 
** :set number Nummerieren der Zeilen
 
** :set tabstop=2 beim tab wird 2 Zeichen nach vorn gerücket
 
** :syntax on Farben werden eingeschaltet
 
  
==Substitutionsbefehle==
+
== Visueller Modus ==
=== Grundsyntax ===
 
Die grundlegende Syntax eines Substitutionsbefehls lautet:
 
  
<pre> :s/Pattern/Ersetzung/ </pre>
+
'''Tipp:''' Erst Text markieren, dann Befehl ausführen.
*s: Steht für Substitution (Ersetzung).
 
*Pattern: Das Suchmuster (z. B. ein Wort oder eine Zeichenfolge, die ersetzt werden soll).
 
*Ersetzung: Der Text, der anstelle des gefundenen Musters eingefügt wird.
 
=== Ersetzungen in der aktuellen Zeile ===
 
Um "eins" durch "zwei" in der aktuellen Zeile zu ersetzen:
 
<pre> :s/eins/zwei/ </pre>
 
*In der Zeile wird nur das erste Vorkommen von "eins" durch "zwei" ersetzt.
 
=== Alle Vorkommen in der Zeile ersetzen ===
 
Um alle Vorkommen von "eins" in der aktuellen Zeile durch "zwei" zu ersetzen:
 
<pre> :s/eins/zwei/g </pre>
 
*Der g-Schalter steht für global, was bedeutet, dass alle Vorkommen des Musters in der Zeile ersetzt werden.
 
=== Ersetzungen in allen Zeilen ===
 
Um in allen Zeilen der Datei "eins" durch "zwei" zu ersetzen:
 
<pre> :%s/eins/zwei/g </pre>
 
*% bedeutet alle Zeilen in der Datei.
 
*Der g-Schalter ersetzt alle Vorkommen von "eins" durch "zwei" in jeder Zeile.
 
=== Interaktive Ersetzung ===
 
Um eine interaktive Ersetzung durchzuführen, bei der für jedes Vorkommen gefragt wird, ob es ersetzt werden soll:
 
<pre> :%s/eins/zwei/gc </pre>
 
*c steht für confirm (Bestätigung). Vim fragt nach jedem Vorkommen, ob es ersetzt werden soll.
 
=== Ersetzungen mit regulären Ausdrücken ===
 
Vim unterstützt reguläre Ausdrücke in Substitutionen, was die Suche und Ersetzung noch mächtiger macht.
 
  
Um jede Zahl mit einem Doppelpunkt davor zu ersetzen:
+
=== Auswahl ===
<pre> :%s/\([0-9]\)/:\1/g </pre>
+
* <code>v</code> – Zeichenweise markieren
*[0-9] sucht nach einer Ziffer.
+
* <code>V</code> – Zeilenweise markieren
*\(\) speichert seinen Inahlt als eine Gruppe.
+
* <code>Ctrl+v</code> – Blockauswahl (Spalten)
*\1 setzt die erste gespeicherte Gruppe ein.
+
* <code>ggVG</code> – Gesamte Datei markieren
  
=== Ersetzen nur beim ersten Vorkommen ===
+
=== Aktionen auf Auswahl ===
Um nur das erste Vorkommen von "eins" in jeder Zeile zu ersetzen:
+
* <code>d</code> – Auswahl löschen
<pre> :%s/eins/zwei/ </pre>
+
* <code>y</code> – Auswahl kopieren
*Ohne den g-Schalter wird nur das erste Vorkommen in der Zeile ersetzt.
+
* <code>></code> – Einrücken
 +
* <code><</code> – Ausrücken
 +
* <code>~</code> – Groß-/Kleinschreibung wechseln
 +
* <code>:</code> – Befehl auf Auswahl anwenden
  
=== Ersetzen mit einer Bedingung ===
+
== Befehlszeilenmodus ==
Um in Zeilen, die das Wort "fuenf" enthalten, "fuenf" durch "5" zu ersetzen:
 
<pre> :/fuenf/s/fuenf/5/g </pre>
 
*/fuenf/ begrenzt die Ersetzung auf Zeilen, die das Wort "fuenf" enthalten.
 
=== Löschen von Text ===
 
Um "eins" in der gesamten Datei zu löschen (ersetzen durch nichts):
 
<pre> :%s/eins//g </pre>
 
*Die Ersetzung durch nichts entfernt das Wort "eins" aus allen Zeilen.
 
=== Rückgängig machen ===
 
Alle Ersetzungen können mit u rückgängig gemacht werden, um Fehler zu korrigieren.
 
=== Zusammenfassung der wichtigsten Optionen ===
 
*%: Ersetzt in der gesamten Datei.
 
*g: Ersetzt alle Vorkommen in einer Zeile.
 
*c: Interaktive Bestätigung.
 
*Reguläre Ausdrücke: Mächtige Suchen mit Wildcards (z. B. .*, \d, \b)
 
  
==Konfigdatei==
+
=== Datei ===
Allgemein
+
* <code>:w</code> – Speichern
/etc/vimrc
+
* <code>:w!</code> – Speichern (Schreibschutz überschreiben)
Individuell
+
* <code>:q</code> – Beenden
~/.vimrc
+
* <code>:q!</code> – Beenden ohne Speichern
Beispiel
+
* <code>:wq!</code> – Speichern und beenden
syntax on
+
* <code>:e <datei></code> – Andere Datei öffnen
set ruler
+
* <code>:r <datei></code> – Datei an aktueller Stelle einfügen
set tabstop=2
 
  
==Specials==
+
=== Shell & Einstellungen ===
Cursor springt nach den Start ans Dateiende
+
* <code>:sh</code> – Kurz in Shell wechseln (zurück mit <code>exit</code>)
vi + <datei>
+
* <code>:!befehl</code> – Shell-Befehl ausführen
Cursor springt nach den Start in Zeile 97
+
* <code>:r!befehl</code> – Ausgabe ins Dokument einfügen
vi +97 <datei>
+
* <code>:set number</code> – Zeilennummern anzeigen
 +
* <code>:set ruler</code> – Koordinaten anzeigen
 +
* <code>:syntax on</code> – Syntax-Highlighting
 +
* <code>:set tabstop=2</code> – Tab-Breite setzen
  
 +
=== Suchen & Ersetzen ===
 +
* <code>:s/alt/neu/</code> – Erstes Vorkommen in aktueller Zeile
 +
* <code>:s/alt/neu/g</code> – Alle Vorkommen in aktueller Zeile
 +
* <code>:%s/alt/neu/g</code> – Alle Vorkommen in der gesamten Datei
 +
* <code>:%s/alt/neu/gc</code> – Alle ersetzen mit Bestätigung
 +
* <code>:%s/alt//g</code> – Text löschen (durch nichts ersetzen)
  
==[[Reguläre Ausdrücke]]==
+
== Reguläre Ausdrücke (Auswahl) ==
  
{| Border=1 Cellpadding=2
+
{| class="wikitable"
|c
+
! Zeichen !! Bedeutung
|Ein einzelner Buchstabe passt auf sich selbst
 
 
|-
 
|-
|.
+
| <code>.</code> || Beliebiges Zeichen (außer Zeilenende)
|Ein Punkt passt auf jedes Zeichen außer auf das Zeilenende
 
 
|-
 
|-
|*
+
| <code>*</code> || Vorheriges Muster 0 oder mehrmals
|Das dem Operator * vorangehende Muster kann 0 oder öfter vorkommen
 
 
|-
 
|-
|^
+
| <code>^</code> || Zeilenanfang
|(Caret) passt auf den Zeilenanfang
 
 
|-
 
|-
|$
+
| <code>$</code> || Zeilenende
|Passt auf das Zeilenende
 
 
|-
 
|-
|\
+
| <code>[...]</code> || Genau eines der angegebenen Zeichen
|Das folgende Sonderzeichen wird entwertet
 
 
|-
 
|-
|[...]
+
| <code>[^...]</code> || Kein Zeichen aus der Menge
|Passt auf "genau" eins in [...] angebenen Zeichen
 
 
|-
 
|-
|[^...]
+
| <code>\<</code> || Wortanfang
|Passt auf "genau" ein Zeichen welches nicht in [...] angebenen ist
 
 
|-
 
|-
|\<
+
| <code>\></code> || Wortende
|Passt auf den Wortanfang
 
 
|-
 
|-
|\>
+
| <code>\</code> || Sonderzeichen entwerten
|Passt auf das Wortende
 
 
|}
 
|}
 +
 +
== Konfiguration ==
 +
 +
=== Konfigdateien ===
 +
; Systemweit
 +
: <code>/etc/vimrc</code>
 +
; Individuell (pro Benutzer)
 +
: <code>~/.vimrc</code>
 +
 +
=== Beispiel ~/.vimrc ===
 +
<pre>
 +
syntax on
 +
set ruler
 +
set number
 +
set tabstop=2
 +
</pre>
 +
 +
=== Datei mit Cursorposition öffnen ===
 +
* <code>vi + <datei></code> – Cursor am Dateiende
 +
* <code>vi +97 <datei></code> – Cursor in Zeile 97

Aktuelle Version vom 19. April 2026, 09:10 Uhr

Die 4 Modi

Modus Aktivieren Verlassen
Normalmodus Standardmodus beim Öffnen
Einfügemodus i vor Cursor, a nach Cursor, o neue Zeile unten, O neue Zeile oben ESC
Visueller Modus v zeichenweise, V zeilenweise, Ctrl+v Blockauswahl ESC
Befehlszeilenmodus : Befehl, / Suche vorwärts, ? Suche rückwärts ESC

Merke: Immer mit ESC zurück in den Normalmodus.

Normalmodus

Navigation

  • gg – Anfang der Datei
  • G – Ende der Datei
  • :4 – Springe zu Zeile 4
  • 0 – Zeilenanfang
  • $ – Zeilenende
  • w – Nächstes Wort
  • b – Vorheriges Wort

Löschen

  • dd – Zeile löschen (in Register)
  • 3dd – 3 Zeilen löschen
  • dG – Bis Dateiende löschen
  • d0 – Bis Zeilenanfang löschen
  • d$ – Bis Zeilenende löschen
  • x – Zeichen löschen
  • 3x – 3 Zeichen löschen

Kopieren & Einfügen

  • yy – Zeile kopieren (yank)
  • 3yy – 3 Zeilen kopieren
  • yG – Bis Dateiende kopieren
  • y0 – Bis Zeilenanfang kopieren
  • y$ – Bis Zeilenende kopieren
  • p – Einfügen nach Cursor
  • P – Einfügen vor Cursor

Suchen

  • /muster – Vorwärts suchen
  • ?muster – Rückwärts suchen
  • n – Nächster Treffer
  • N – Vorheriger Treffer
  • * – Wort unter Cursor suchen

Sonstiges

  • u – Rückgängig (undo)
  • Ctrl+r – Wiederholen (redo)
  • . – Letzten Befehl wiederholen
  • r – Einzelnes Zeichen ersetzen
  • ZZ – Speichern und beenden

Visueller Modus

Tipp: Erst Text markieren, dann Befehl ausführen.

Auswahl

  • v – Zeichenweise markieren
  • V – Zeilenweise markieren
  • Ctrl+v – Blockauswahl (Spalten)
  • ggVG – Gesamte Datei markieren

Aktionen auf Auswahl

  • d – Auswahl löschen
  • y – Auswahl kopieren
  • > – Einrücken
  • < – Ausrücken
  • ~ – Groß-/Kleinschreibung wechseln
  • : – Befehl auf Auswahl anwenden

Befehlszeilenmodus

Datei

  • :w – Speichern
  • :w! – Speichern (Schreibschutz überschreiben)
  • :q – Beenden
  • :q! – Beenden ohne Speichern
  • :wq! – Speichern und beenden
  • :e <datei> – Andere Datei öffnen
  • :r <datei> – Datei an aktueller Stelle einfügen

Shell & Einstellungen

  • :sh – Kurz in Shell wechseln (zurück mit exit)
  • :!befehl – Shell-Befehl ausführen
  • :r!befehl – Ausgabe ins Dokument einfügen
  • :set number – Zeilennummern anzeigen
  • :set ruler – Koordinaten anzeigen
  • :syntax on – Syntax-Highlighting
  • :set tabstop=2 – Tab-Breite setzen

Suchen & Ersetzen

  • :s/alt/neu/ – Erstes Vorkommen in aktueller Zeile
  • :s/alt/neu/g – Alle Vorkommen in aktueller Zeile
  • :%s/alt/neu/g – Alle Vorkommen in der gesamten Datei
  • :%s/alt/neu/gc – Alle ersetzen mit Bestätigung
  • :%s/alt//g – Text löschen (durch nichts ersetzen)

Reguläre Ausdrücke (Auswahl)

Zeichen Bedeutung
. Beliebiges Zeichen (außer Zeilenende)
* Vorheriges Muster 0 oder mehrmals
^ Zeilenanfang
$ Zeilenende
[...] Genau eines der angegebenen Zeichen
[^...] Kein Zeichen aus der Menge
\< Wortanfang
\> Wortende
\ Sonderzeichen entwerten

Konfiguration

Konfigdateien

Systemweit
/etc/vimrc
Individuell (pro Benutzer)
~/.vimrc

Beispiel ~/.vimrc

syntax on
set ruler
set number
set tabstop=2

Datei mit Cursorposition öffnen

  • vi + <datei> – Cursor am Dateiende
  • vi +97 <datei> – Cursor in Zeile 97