|
|
Zeile 29: |
Zeile 29: |
| === Umgebungsvariablen === | | === Umgebungsvariablen === |
| === Exit-Status === | | === Exit-Status === |
|
| |
| == Anwendungen ==
| |
| === Einführung ===
| |
| Der Editor vi (visual) ist ein bildschirmorientierter Editor, das heißt der Text ist in seiner aktuellen Version auf dem Bildschirm zu sehen
| |
|
| |
| Vim verfügt über drei verschiedene Arbeitsmodi
| |
| * Diese werden im folgenden kurz beschrieben
| |
| * Die wichtigsten Tastenkürzel zur Arbeit mit dem Vim werden im Artikel Vim/Shortcuts erläutert
| |
|
| |
| Nach dem Aufruf des vi befindet sich der Benutzer im Kommandomodus
| |
| * Die Arbeit spielt sich wie beim ed immer in zwei Ebenen ab
| |
|
| |
| '''Kommandomodus'''
| |
| * Freies Positionieren innerhalb des Textes
| |
| * Umsetzen von Textblöcken
| |
| * Schreiben und Lesen von Dateien
| |
| * Löschen von Textblöcken und Aufruf von UNIX-Kommandos
| |
| '''Eingabemodus'''
| |
| * Einfügen von Text
| |
| * Überschreiben vorhandener Textpassagen
| |
|
| |
| * Das Umschalten zwischen den Modi erfolgt mit der [ESC]-Taste
| |
| * Die Handhabung des Kommandomodus des vi macht die Bedienung für den Anfänger etwas ungewohnt
| |
| * Die Cursorpositionierung erfolgt mit verschiedenen Tasten, für die Eingabe von Dateibefehlen oder anderen Funktionen (z. B. Suchen/ersetzen) ist die Eingabe eines Doppelpunktes nötig
| |
| * Man befindet sich dann in ex-Modus, der ähnliche Eigenschaften hat, wie der Editor ed
| |
|
| |
| ==== Starten ====
| |
| '''vi [Dateiname]'''
| |
|
| |
| * Ist die Datei vorhanden, wird sie in den Editorpuffer geladen, andernfalls wird sie neu angelegt
| |
| * Wird der vi ohne die Angabe eines Dateinamens gestartet, ist der Bildschirm auf der linken Seite mit Tilden (~) gefüllt
| |
| * Jede leere Zeile hinter dem Ende der Datei wird auf diese Art dargestellt
| |
| * Am unteren Ende des Bildschirms wird der Dateiname anzeigt, falls eine existierende Datei angegeben wurde
| |
| ** Die Größe der Datei wird ebenfalls angezeigt
| |
| ** Wenn diese Informationen nicht angezeigt werden, könnte es sein, dass der Terminaltyp falsch gesetzt ist
| |
| ** Dann sollte der vi mit :q! und [ENTER] verlassen und der Terminaltyp korrekt eingestellt werden
| |
|
| |
| Falls die angegebene Datei nicht existiert, wird auf folgende Art angezeigt, dass es sich um eine neue Datei handelt
| |
| "newfile" [New file]
| |
|
| |
| Nach dem Start ohne Dateinamen, ist die unterste Bildschirmzeile leer
| |
|
| |
| ==== Hilfen ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | '''man vi'''
| |
| | | Manualpage von '''vi''' aufrufen
| |
| |-
| |
| | | ''':h <Stichwort>'''
| |
| | | Hilfe aufrufen (mit :q verlassen)
| |
| |-
| |
| | | '''vimtutor'''
| |
| | | Lernprogramm
| |
| |-
| |
| |}
| |
|
| |
| ==== Befehlsmodus ====
| |
| ; Nach dem Aufruf befindet sich Vim im Befehlsmodus
| |
| Vergleichbar mit Klicken durch die Menüs eines grafischen Programms
| |
|
| |
| {| class="wikitable options"
| |
| ! Tastenkürzel !! Aktion
| |
| |-
| |
| | j || Schritt abwärts
| |
| |-
| |
| | k || Schritt aufwärts
| |
| |-
| |
| | h || Schritt nach links
| |
| |-
| |
| | l || Schritt nach rechts
| |
| |-
| |
| | dd || löscht eine komplette Zeile an der Cursorposition
| |
| |-
| |
| | u || macht letzte Änderung rückgängig
| |
| |-
| |
| | STRG + R || macht u rückgängig
| |
| |-
| |
| | ZZ || speichert die Datei und beendet Vim
| |
| |}
| |
|
| |
| ====Einfügemodus ====
| |
| Befindet sich der Vim im Einfügemodus, so kann der Text nach Belieben editiert werden
| |
|
| |
| <table >
| |
| <tr>
| |
| <th> Tastenkürzel </th>
| |
| <th > Aktion </th>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > i</td>
| |
| <td > Editiermodus an der Cursorposition starten </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > a </td>
| |
| <td > Editiermodus eine Stelle hinter der Cursorposition starten </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > o </td>
| |
| <td > Zeile unterhalb der Cursorposition einfügen und Editiermodus starten </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > ESC </td>
| |
| <td > Editiermodus beenden </td>
| |
| </tr>
| |
| </table>
| |
|
| |
| ==== Kommandozeilenmodus ====
| |
| Neben Befehlen, die zum Bewegen durch die Datei oder deren Modifikation dienen, kann man im Kommandozeilenmodus auch Parameter des Programms selber ändern, Dateien laden und/oder (Shell-) Befehle ausführen
| |
| * Das Verhalten ist mit einer Mini-Kommandozeile vergleichbar
| |
|
| |
| <table >
| |
| <tr>
| |
| <th> Tastenkürzel </th>
| |
| <th > Aktion </th>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > :w</td>
| |
| <td > Datei speichern </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > :w name </td>
| |
| <td > Datei unter name speichern </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > :q! </td>
| |
| <td > Vim ohne Speichern beenden </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > /such_ausdruck </td>
| |
| <td > Datei nach such_ausdruck durchsuchen </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > :e datei_name </td>
| |
| <td > Datei datei_name öffnen </td>
| |
| </tr>
| |
|
| |
| <tr>
| |
| <td > :e # </td>
| |
| <td > zur zuvor bearbeiteten Datei zurückkehren </td>
| |
| </tr>
| |
| </table>
| |
|
| |
| === Cursorpositionierung ===
| |
| Normalerweise ist der '''vi''' an die Pfeiltasten der Tastatur richtig angepasst
| |
| * Daneben gibt es noch folgende Möglichkeiten (Auswahl)
| |
| {|class="wikitable opt2 sortable"
| |
| |-
| |
| | | '''h '''
| |
| | | Zeichen links (auch Backspace)
| |
| |-
| |
| | | '''l '''
| |
| | | Zeichen rechts (auch blank)
| |
| |-
| |
| | | '''k '''
| |
| | | Zeile höher
| |
| |-
| |
| | | '''j '''
| |
| | | Zeile tiefer
| |
| |-
| |
| | | '''b '''
| |
| | | Wortanfang
| |
| |-
| |
| | | '''e '''
| |
| | | Wortende
| |
| |-
| |
| | | '''w '''
| |
| | | Anfang nächstes Wort
| |
| |-
| |
| | | '''H '''
| |
| | | Anfang erste Zeile des Bildschirms
| |
| |-
| |
| | | '''L '''
| |
| | | Anfang letzten Zeile des Bildschirms
| |
| |-
| |
| | | '''0 (Null) '''
| |
| | | Zeilenanfang
| |
| |-
| |
| | | '''$ '''
| |
| | | Zeilenende
| |
| |-
| |
| | | '''RETURN '''
| |
| | | nächste Zeile
| |
| |-
| |
| | | <u>'''''n''</u>G '''
| |
| | | (''Go'') Gehe zu Zeile <u>'''''n'''''</u></tt>. <tt><u>'''''n'''''</u> ist eine Zeilennummer
| |
| * Fehlt die Zahl, wird zur letzten Zeile der Datei gesprungen
| |
| |-
| |
| | | '''%'''
| |
| | | sucht zur aktuellen Klammer die korrespondierende öffnende oder schließende Klammer
| |
| |-
| |
| | | '''('''
| |
| | | Cursor zum Anfang des Satzes bewegen
| |
| |-
| |
| | | ''')'''
| |
| | | Cursor zum Anfang des nächsten Satzes bewegen
| |
| |-
| |
| | | '''{'''
| |
| | | Cursor zum Anfang des Absatzes bewegen
| |
| |-
| |
| | | '''}'''
| |
| | | Cursor zum Anfang des nächsten Absatzes bewegen
| |
|
| |
| |-
| |
| |}
| |
|
| |
| === Befehls-Modus ===
| |
| Die Befehle des ''Befehls''-Modus haben folgendes Format
| |
| [Anzahl] Befehl [Ort]
| |
|
| |
| * Die meisten Befehle sind ein Zeichen lang
| |
| * Mit ''Anzahl'' wird ein Wiederholungsfaktor dür den folgenden Befehl angegeben
| |
| * So löscht zum Beispiel der Befehl x das Zeichen unter der Schreibmarke
| |
| * Wird 10x eingegeben, werden 10 Zeichen gelöscht
| |
|
| |
| Einige Befehle nutzen einen optionalen ''Ort''-Parameter, der angibt, wieviele Zeilen oder wieviel Text des Dokuments vom Befehl bearbeitet werden soll
| |
| * Der ''Ort''-Parameter kann auch jeder Befehl sein, der die Schreibmarke bewegt
| |
|
| |
| ==== Allgemeine Befehle ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | :q
| |
| | | vi beenden (wenn keine Änderungen)
| |
| |-
| |
| | | :q!
| |
| | | vi beenden und Änderungen verwerfen
| |
| |-
| |
| |}
| |
|
| |
| ==== Dateibefehle ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | :r Datei
| |
| | | Text aus der angegebenen Datei nach der momentanen Zeile einfügen
| |
| |-
| |
| | | :w
| |
| | | Datei speichern
| |
| |-
| |
| | | :w!
| |
| | | Datei speichern und Schreibschutz ignorieren
| |
| |-
| |
| | | :w Datei
| |
| | | Speichern unter ... (angegebene Datei wird überschrieben)
| |
| |-
| |
| | | :w >> Datei
| |
| | | Text an die angegebene Datei anhängen
| |
| |-
| |
| | | :wq oder :x oder ZZ
| |
| | | Text speichern und vi beenden
| |
| |-
| |
| |}
| |
|
| |
| ==== Mehrere Dateien bearbeiten ====
| |
| Um mehr als eine Datei zu bearbeiten, können beim Aufruf mehrere Dateinamen übergeben oder nachträglich weitere Dateien geöffnet werden
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | :e Datei
| |
| | | Neue Datei bearbeiten
| |
| |-
| |
| | | :n
| |
| | | Wechselt zur nächsten geladenen Datei
| |
| |-
| |
| |}
| |
|
| |
| ==== Blättern auf dem Bildschirm ====
| |
| Normalerweise ist der vi an die Pfeiltasten der Tastatur richtig angepasst
| |
| * Daneben gibt es noch folgende Möglichkeiten (Auswahl)
| |
|
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | STRG-F
| |
| | | Eine Bildschirmseite vorwärts
| |
| |-
| |
| | | STRG-B
| |
| | | Eine Bildschirmseite rückwärts
| |
| |-
| |
| | | STRG-D
| |
| | | Eine halbe Bildschirmseite vorwärts
| |
| |-
| |
| | | STRG-U
| |
| | | Eine halbe Bildschirmseite rückwärts
| |
| |-
| |
| | | STRG-L
| |
| | | Bildschirm neu aufbauen (wenn zum Beispiel eine Nachricht kam)
| |
| |-
| |
| |}
| |
|
| |
| ==== Texteingabe ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | i
| |
| | | (''insert'') Eingabe links vom Cursor
| |
| |-
| |
| | | I
| |
| | | Eingaben am Zeilenanfang
| |
| |-
| |
| | | a
| |
| | | (''append'') Eingabe rechts vom Cursor
| |
| |-
| |
| | | A
| |
| | | (appand) Eingabe am Zeilenende
| |
| |-
| |
| | | o
| |
| | | Neue Zeile unter der aktuellen Zeile
| |
| |-
| |
| | | O
| |
| | | Eingabe in der vorhergehenden Zeile, Spalte 1
| |
| |-
| |
| |}
| |
| Der Eingabemodus wird durch Drücken der [ESC]-Taste verlassen
| |
|
| |
| ==== Text ändern ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | ~
| |
| | | Wechsel Groß-/Kleinbuchstaben (kein Abschluss mit [ESC])
| |
| |-
| |
| | | r
| |
| | | Zeichen ersetzen (kein Abschluss mit [ESC])
| |
| |-
| |
| | | R
| |
| | | Mehrere Zeichen ersetzen
| |
| |-
| |
| | | s
| |
| | | Ein Zeichen ersetzen und zusätzliche Zeichen anschließend einfügen
| |
| |-
| |
| | | cc
| |
| | | Gesamte Zeile ändern
| |
| |-
| |
| | | cw
| |
| | | Wort ändern
| |
| |-
| |
| | | C
| |
| | | ab Cursorposition bis Zeilenende ändern
| |
| |-
| |
| | | J
| |
| | | Zeilen verbinden (nächste Zeile anhängen)
| |
| |-
| |
| |}
| |
|
| |
| ==== Text ausschneiden ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | x
| |
| | | Zeichen unter dem Cursor löschen
| |
| |-
| |
| | | X
| |
| | | Zeichen vor dem Cursor löschen
| |
| |-
| |
| | | dw
| |
| | | ab Cursorposition bis Wortende löschen
| |
| |-
| |
| | | db
| |
| | | ab Cursorposition bis Wortanfang löschen
| |
| |-
| |
| | | <u>''n''</u>dd
| |
| | | <u>''n''</u> ganze Zeile löschen
| |
| |-
| |
| | | D
| |
| | | Ab Cursor bis Zeilenende löschen
| |
| |-
| |
| |}
| |
| Gelöschte Zeichen werden im anonymen Puffer abgelegt
| |
|
| |
| ==== Kopieren und Einfügen ====
| |
| * Yank wird in der Regel mit einem zweiten Steuerbuchstaben kombiniert, der angibt, wie viel Text gepuffert wird. (z. B. "'''yw'''", "y$")
| |
| * Vor "'''yy'''" kann noch die Anzahl der zu kopierenden Zeilen stehen (z. B. '''12yy''')
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | yy oder Y
| |
| | | (Yank) ganze Zeile in anonymen Puffer kopieren
| |
| |-
| |
| | | yw
| |
| | | Bis zum nächsten Wort kopieren
| |
| |-
| |
| | | Y$
| |
| | | Bis Zeilenende kopieren
| |
| |-
| |
| | | p
| |
| | | Hinter dem Cursor einfügen
| |
| |-
| |
| | | P
| |
| | | Vor dem Cursor einfügen
| |
| |-
| |
| |}
| |
|
| |
| ==== Suchen und Ersetzen ====
| |
| Außer 'fx' und 'Fx' müssen die Suchkommandos mit der Return-Taste abgeschlossen werden
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | fx
| |
| | | Zeichen 'x' in der momentanen Zeile suchen (vorwärts)
| |
| |-
| |
| | | Fx
| |
| | | Zeichen 'x' in der momentanen Zeile suchen (rückwärts)
| |
| |-
| |
| | | /str
| |
| | | String 'str' vorwärts in der Datei suchen
| |
| |-
| |
| | | ?str
| |
| | | String 'str' rückwärts in der Datei suchen
| |
| |-
| |
| | | //
| |
| | | Letzten Suchbefehl wiederholen (vorwärts)
| |
| |-
| |
| | | ??
| |
| | | Letzten Suchbefehl wiederholen (rückwärts)
| |
| |-
| |
| | | :%s/X/Y/g
| |
| | | Ersetzt alle 'X' durch 'Y'
| |
| |-
| |
| |}
| |
|
| |
| ==== Sonstige Kommandos ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | u
| |
| | | Letzten Befehl rückgängig machen
| |
| |-
| |
| | | U
| |
| | | Aktuelle Zeile wiederherstellen
| |
| |-
| |
| | |
| |
| | | Letztes Kommando wiederholen
| |
| |-
| |
| | | :!cmd
| |
| | | Verlässt vi temporär und führt das Kommando ''cmd'' aus (ggf. Rückkehr mit exit)
| |
| |-
| |
| | | :r!cmd
| |
| | | Fügt die Ausgabe von ''cmd'' ab Cursorposition ein
| |
| |-
| |
| | | !!cmd
| |
| | | Benutzt aktuelle Zeile als Eingabe für ''cmd'' und ersetzt durch dessen Ausgabe
| |
| |-
| |
| | | Strg + g
| |
| | | Zeilennummer und Dateiinfo zeigen
| |
| |-
| |
| |}
| |
|
| |
| ==== Markierungen ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | v
| |
| | | Visuelles Markieren
| |
| |-
| |
| | | m<u>''A''</u>
| |
| | | Marke <u>''A''</u> setzen
| |
| |-
| |
| | | '<u>''A''</u>
| |
| | | Zur Marke <u>''A''</u> springen
| |
| |-
| |
| | | d'<u>''A''</u>
| |
| | | Bis Marke <u>''A''</u> löschen
| |
| |-
| |
| | | y'<u>''A''</u>
| |
| | | Kopieren bis Marke <u>''A''</u>
| |
| |-
| |
| |}
| |
|
| |
| ==== Einrücken und klammern ====
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | <<
| |
| | | rückt die aktuelle Zeile um eine Einrückungsbreite nach links
| |
| |-
| |
| | | >>
| |
| | | rückt die aktuelle Zeile um eine Einrückungsbreite nach rechts
| |
| |-
| |
| | | %
| |
| | | Bewegt die Einfügemarke zwischen korrespondierenden Klammern
| |
| |-
| |
| |}
| |
|
| |
| === Tipps und Tricks ===
| |
| ==== Zeile verschieben ====
| |
| * Zeile mit '''dd''' löschen
| |
| * Zur neuen Position wechseln
| |
| * mit p (hinter dem Cursor)''' '''
| |
| * '''P''' (vor dem Cursor) einfügen
| |
|
| |
| ==== Zeile kopieren ====
| |
| * Zeile mit '''yy''' in den Puffer kopieren
| |
| * Zur neuen Position wechseln
| |
| * Zeile mit p (vor dem Cursor)
| |
| * oder P (nach dem Cursor) einfügen
| |
|
| |
| ==== Ein paar einfache Tricks ====
| |
| * zwei '''aufeinander folgende Zeichen vertauschen: xp'''
| |
| * zwei aufeinander folgende Zeilen vertauschen: '''ddp'''
| |
| * eine Zeile duplizieren: '''yyp'''
| |
|
| |
| ==== Mehrere Zeilen verschieben oder kopieren ====
| |
| Mehrere Zeilen werden durch Voranstellen der Zeilenzahl vor '''dd''' oder '''yy''' in den Puffer gebracht. Alles Weitere wie oben
| |
|
| |
| ==== Weitere Puffer ====
| |
| * Neben dem anonymen Puffer können 26 weitere Pufferbereiche verwendet werden, die durch einen Buchstaben ("a" - "z") bezeichnet werden
| |
| *Dazu wird ein Doppelapostroph und der Puffername vor den Befehl gestellt, zum Beispiel
| |
|
| |
| {|class="wikitable sortable"
| |
| |-
| |
| | | '''"ayy'''
| |
| | | kopiere Zeile in Puffer '''a'''
| |
| |-
| |
| | | '''"b6yy'''
| |
| | | kopiere die nächsten 6 Zeilen in Puffer '''b'''
| |
| |-
| |
| | | '''"ap'''
| |
| | | Inhalt Puffer '''a''' nach dem Cursor einfügen
| |
| |-
| |
| |}
| |
|
| |
| ==== Blöcke von einer Datei in die andere übertragen ====
| |
| * Mit dem Kommando ''':e <dateiname>''' kann eine neue Datei bearbeitet werden, ohne den vi zu verlassen
| |
| * vi mit der ersten Datei aufrufen, z. B. : '''vi foo.txt'''
| |
| * Textblock mit den Yank-Kommando in einen Puffer schreiben: '''"f10yy'''</tt> (10 Zeilen in Puffer <tt>'''f''')
| |
| * neue Datei holen, z. B. : ''':e bar.txt '''
| |
| * an die gewünschte Stelle gehen und Puffer einfügen''': "fp '''
| |
|
| |
| <noinclude>
| |
|
| |
|
| == Anhang == | | == Anhang == |