VI Crash: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 92: Zeile 92:
 
Um jede Zahl mit einem Doppelpunkt davor zu ersetzen:
 
Um jede Zahl mit einem Doppelpunkt davor zu ersetzen:
 
<pre> :%s/\([0-9]\)/:\1/g </pre>
 
<pre> :%s/\([0-9]\)/:\1/g </pre>
*\([0-9]\) sucht nach einer Ziffer und speichert sie in einer Gruppe.
+
*[0-9] sucht nach einer Ziffer.
*\1 stellt die gespeicherte Ziffer in der Ersetzung wieder her, aber mit einem Doppelpunkt davor.
+
*\(\) speichert seinen Inahlt als eine Gruppe.
 +
*\1 setzt die erste gespeicherte Gruppe ein.
 +
 
 
=== Ersetzen nur beim ersten Vorkommen ===
 
=== Ersetzen nur beim ersten Vorkommen ===
 
Um nur das erste Vorkommen von "eins" in jeder Zeile zu ersetzen:
 
Um nur das erste Vorkommen von "eins" in jeder Zeile zu ersetzen:

Version vom 27. November 2024, 10:55 Uhr

Der VI besitzt 3 Hauptmodi

  • Normalmodus (Normal Mode)

Navigation und Bearbeitung von Text im Standardmodus.

  • Einfügemodus (Insert Mode)

Text eingeben und bearbeiten.

  • Befehlszeilenmodus (Command-Line Mode)

Befehle wie Speichern, Beenden und Suchen ausführen.


Navigation (Auswahl)

Einfügemodus <- i,a,o... <- Normalmodus ->   :,/,?   -> Befehlszeilenmodus
             ->    ESC   ->             <-     ESC   <-

Normalmodus (Auswahl)

  • d löschen
    • dd eine Zeile löschen und in ein Register schreiben
    • 3dd drei Zeilen löschen und in ein Register schreiben
    • dG lösche ab der aktuellen Zeile bis zum Ende und in ein Register schreiben
    • d3G lösche ab der aktuellen Zeile bis zur Zeile 3 und in ein Register schreiben
    • d0 bis zum Zeilenanfang löschen und in ein Register schreiben
    • d$ bis zum Zeilenende löschen und in ein Register schreiben
  • y yanken
    • 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)

  • :w schreiben der Datei
  • :w! schreiben der Datei übergehe Schreibschutz
  • :q beenden
  • :q! forciert beenden
  • :wq! speichern und forciert beenden
  • :e <datei> andere Datei öffnen
  • :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

Grundsyntax

Die grundlegende Syntax eines Substitutionsbefehls lautet:

 :s/Pattern/Ersetzung/ 
  • 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:

 :s/eins/zwei/ 
  • 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:

 :s/eins/zwei/g 
  • 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:

 :%s/eins/zwei/g 
  • % 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:

 :%s/eins/zwei/gc 
  • 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:

 :%s/\([0-9]\)/:\1/g 
  • [0-9] sucht nach einer Ziffer.
  • \(\) speichert seinen Inahlt als eine Gruppe.
  • \1 setzt die erste gespeicherte Gruppe ein.

Ersetzen nur beim ersten Vorkommen

Um nur das erste Vorkommen von "eins" in jeder Zeile zu ersetzen:

 :s/eins/zwei/ 
  • Ohne den g-Schalter wird nur das erste Vorkommen in der Zeile ersetzt.

Ersetzen mit einer Bedingung

Um in Zeilen, die das Wort "fuenf" enthalten, "fuenf" durch "5" zu ersetzen:

 :/fuenf/s/fuenf/5/g 
  • /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):

 :%s/eins//g 
  • 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.
  • 1: Ersetzt nur das erste Vorkommen in einer Zeile (standardmäßig ohne g).
  • Reguläre Ausdrücke: Mächtige Suchen mit Wildcards (z. B. .*, \d, \b)


Konfigdatei

Allgemein

/etc/vimrc

Individuell

~/.vimrc

Beispiel

syntax on
set ruler
set tabstop=2

Specials

Cursor springt nach den Start ans Dateiende

vi + <datei>

Cursor springt nach den Start in Zeile 97

vi +97 <datei>


Reguläre Ausdrücke

c Ein einzelner Buchstabe passt auf sich selbst
. Ein Punkt passt auf jedes Zeichen außer auf das Zeilenende
* Das dem Operator * vorangehende Muster kann 0 oder öfter vorkommen
^ (Caret) passt auf den Zeilenanfang
$ Passt auf das Zeilenende
\ Das folgende Sonderzeichen wird entwertet
[...] Passt auf "genau" eins in [...] angebenen Zeichen
[^...] Passt auf "genau" ein Zeichen welches nicht in [...] angebenen ist
\< Passt auf den Wortanfang
\> Passt auf das Wortende