Vim: Unterschied zwischen den Versionen
K Dirkwagner verschob die Seite 08 vim nach Entwuft:Dirkwagner:vim, ohne dabei eine Weiterleitung anzulegen |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
= Der Bildschirmeditor vi(m) = | = Der Bildschirmeditor vi(m) = | ||
== Einführung == | == Einführung == | ||
Zeile 56: | Zeile 6: | ||
Der Editor vi (visual) ist ein bildschirmorientierter Editor, d.h. der Text ist in seiner aktuellen Version auf dem Bildschirm zu sehen. Es erfolgt hier nur ein Überblick der Möglichkeiten des vi. | Der Editor vi (visual) ist ein bildschirmorientierter Editor, d.h. der Text ist in seiner aktuellen Version auf dem Bildschirm zu sehen. Es erfolgt hier nur ein Überblick der Möglichkeiten des vi. | ||
[[Image:Grafik1.png|right|top]] | |||
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 | * Freies Positionieren innerhalb des Textes | ||
Zeile 71: | Zeile 14: | ||
* Löschen von Textblöcken und Aufruf von UNIX-Kommandos | * Löschen von Textblöcken und Aufruf von UNIX-Kommandos | ||
* Eingabemodus | * Eingabemodus | ||
Zeile 84: | Zeile 26: | ||
Programmaufruf: | Programmaufruf: | ||
'''vi [Dateiname]''' | |||
[[Image:Grafik4.png|right|top]] | |||
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. | 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. | ||
Zeile 98: | Zeile 41: | ||
Wenn diese Informationen nicht angezeigt werden, könnte es sein, dass der Terminaltyp falsch gesetzt ist. Dann sollte der vi mit <tt>:q! </tt>und [ENTER] verlassen und der Terminaltyp korrekt eingestellt werden. | Wenn diese Informationen nicht angezeigt werden, könnte es sein, dass der Terminaltyp falsch gesetzt ist. Dann sollte der vi mit <tt>:q! </tt>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: | Falls die angegebene Datei nicht existiert, wird auf folgende Art angezeigt, dass es sich um eine neue Datei handelt: | ||
Zeile 111: | Zeile 49: | ||
=== Aufrufparameter === | === Aufrufparameter === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
| style="border-top:2.5pt solid #000000;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''-r '''</tt> | | style="border-top:2.5pt solid #000000;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''-r '''</tt> | ||
| style="border-top:2.5pt solid #000000;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | (recovery) Stellt die letzte Datei nach einem Absturz wieder her | | style="border-top:2.5pt solid #000000;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | (recovery) Stellt die letzte Datei nach einem Absturz wieder her | ||
|- | |- | ||
|} | |} | ||
=== Hilfen === | === Hilfen === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 139: | Zeile 72: | ||
== Cursorpositionierung == | == Cursorpositionierung == | ||
Normalerweise ist der <tt>'''vi'''</tt> an die Pfeiltasten der Tastatur richtig angepasst. Daneben gibt es noch folgende Möglichkeiten (Auswahl): | Normalerweise ist der <tt>'''vi'''</tt> an die Pfeiltasten der Tastatur richtig angepasst. Daneben gibt es noch folgende Möglichkeiten (Auswahl): | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 202: | Zeile 132: | ||
|- | |- | ||
|} | |} | ||
== Befehle im Befehls-Modus == | == Befehle im Befehls-Modus == | ||
Die Befehle des ''Befehls''-Modus haben normalerweise folgendes Format: | Die Befehle des ''Befehls''-Modus haben normalerweise folgendes Format: | ||
Zeile 213: | Zeile 143: | ||
=== Allgemeine Befehle === | === Allgemeine Befehle === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 222: | Zeile 150: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>''':q!'''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>''':q!'''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | vi beenden und Änderungen verwerfen | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | vi beenden und Änderungen verwerfen | ||
|- | |- | ||
|} | |} | ||
=== Dateibefehle === | === Dateibefehle === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 248: | Zeile 173: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>''':wq oder :x oder ZZ'''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>''':wq oder :x oder ZZ'''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Text speichern und vi beenden | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Text speichern und vi beenden | ||
|- | |- | ||
|} | |} | ||
=== Mehrere Dateien bearbeiten === | === 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. | Um mehr als eine Datei zu bearbeiten, können beim Aufruf mehrere Dateinamen übergeben oder nachträglich weitere Dateien geöffnet werden. | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 264: | Zeile 185: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>''':n'''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>''':n'''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Wechselt zur nächsten geladenen Datei | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Wechselt zur nächsten geladenen Datei | ||
|- | |- | ||
|} | |} | ||
=== Blättern auf dem Bildschirm === | === Blättern auf dem Bildschirm === | ||
Normalerweise ist der <tt>'''vi'''</tt> an die Pfeiltasten der Tastatur richtig angepasst. Daneben gibt es noch folgende Möglichkeiten (Auswahl): | Normalerweise ist der <tt>'''vi'''</tt> an die Pfeiltasten der Tastatur richtig angepasst. Daneben gibt es noch folgende Möglichkeiten (Auswahl): | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 289: | Zeile 206: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''STRG-L '''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''STRG-L '''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Bildschirm neu aufbauen (wenn z.B. eine Nachricht kam) | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Bildschirm neu aufbauen (wenn z.B. eine Nachricht kam) | ||
|- | |- | ||
|} | |} | ||
=== Texteingabe === | === Texteingabe === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 320: | Zeile 234: | ||
=== Text ändern === | === Text ändern === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 347: | Zeile 259: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''J '''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''J '''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Zeilen verbinden (nächste Zeile anhängen) | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Zeilen verbinden (nächste Zeile anhängen) | ||
|- | |- | ||
|} | |} | ||
=== Text ausschneiden === | === Text ausschneiden === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 378: | Zeile 287: | ||
=== Kopieren und Einfügen === | === Kopieren und Einfügen === | ||
Yank wird in der Regel mit einem zweiten Steuerbuchstaben kombiniert, der angibt, wie viel Text gepuffert wird. (z. B. "<tt>'''yw'''</tt>", "y$"). Vor "<tt>'''yy'''</tt>" kann noch die Anzahl der zu kopierenden Zeilen stehen (z. B. <tt>'''12yy'''</tt>). | Yank wird in der Regel mit einem zweiten Steuerbuchstaben kombiniert, der angibt, wie viel Text gepuffert wird. (z. B. "<tt>'''yw'''</tt>", "y$"). Vor "<tt>'''yy'''</tt>" kann noch die Anzahl der zu kopierenden Zeilen stehen (z. B. <tt>'''12yy'''</tt>). | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 398: | Zeile 304: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''P'''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''P'''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Vor dem Cursor einfügen | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Vor dem Cursor einfügen | ||
|- | |- | ||
|} | |} | ||
=== Suchen und Ersetzen === | === Suchen und Ersetzen === | ||
Außer <tt>''''fx''''</tt> und <tt>''''Fx''''</tt> müssen die Suchkommandos mit der Return-Taste abgeschlossen werden. | Außer <tt>''''fx''''</tt> und <tt>''''Fx''''</tt> müssen die Suchkommandos mit der Return-Taste abgeschlossen werden. | ||
{| align="center" style="border-spacing:0;width:17.501cm;" | {| align="center" style="border-spacing:0;width:17.501cm;" | ||
|- | |- | ||
Zeile 429: | Zeile 331: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | ''':%s/X/Y/g''' | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | ''':%s/X/Y/g''' | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Ersetzt alle 'X' durch 'Y' | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Ersetzt alle 'X' durch 'Y' | ||
|- | |- | ||
|} | |} | ||
=== Sonstige Kommandos === | === Sonstige Kommandos === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 458: | Zeile 357: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''Strg + g'''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''Strg + g'''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Zeilennummer und Dateiinfo zeigen | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Zeilennummer und Dateiinfo zeigen | ||
|- | |- | ||
|} | |} | ||
=== Markierungen === | === Markierungen === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 481: | Zeile 377: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''y'<u>''A'''''</u></tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''y'<u>''A'''''</u></tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Kopieren bis Marke <tt><u>'''''A'''''</u></tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Kopieren bis Marke <tt><u>'''''A'''''</u></tt> | ||
|- | |- | ||
|} | |} | ||
=== Einrücken und klammern === | === Einrücken und klammern === | ||
{| style="border-spacing:0;margin:auto;width:17.501cm;" | {| style="border-spacing:0;margin:auto;width:17.501cm;" | ||
|- | |- | ||
Zeile 498: | Zeile 391: | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''%'''</tt> | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''%'''</tt> | ||
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Bewegt die Einfügemarke zwischen korrespondierenden Klammern | | style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.349cm;padding-right:0.349cm;" | Bewegt die Einfügemarke zwischen korrespondierenden Klammern | ||
|- | |- | ||
|} | |} | ||
== Einstellungen == | == Einstellungen == | ||
* Durch das Belegen von vi-Optionen (Kommando :set) mit einem Wert oder das Setzen von Optionen kann die Arbeitsweise des Editors beeinflußt werden. | |||
* Die Kommandos set können in ein File mit dem Namen $HOME/.exrc eingetragen werden, welches bei jedem vi-Editoraufruf abgearbeitet wird. | |||
{| style="border-spacing:0;margin:auto;width:17.492cm;" | {| style="border-spacing:0;margin:auto;width:17.492cm;" | ||
|- | |- | ||
Zeile 540: | Zeile 428: | ||
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ''':set wrapmargin=n''' | | style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ''':set wrapmargin=n''' | ||
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Ab n Zeichen vor Zeilenende wird automatisch an einer Wortgrenze getrennt und eine neue Zeile begonnen | | style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Ab n Zeichen vor Zeilenende wird automatisch an einer Wortgrenze getrennt und eine neue Zeile begonnen | ||
|- | |- | ||
|} | |} | ||
==Tipps und Tricks == | |||
'''Zeile verschieben'''* Zeile mit <tt>'''dd'''</tt> löschen | '''Zeile verschieben'''* Zeile mit <tt>'''dd'''</tt> löschen | ||
* Zur neuen Position wechseln | * Zur neuen Position wechseln |
Version vom 3. August 2020, 16:07 Uhr
Der Bildschirmeditor vi(m)
Einführung
Der Editor vi (visual) ist ein bildschirmorientierter Editor, d.h. der Text ist in seiner aktuellen Version auf dem Bildschirm zu sehen. Es erfolgt hier nur ein Überblick der Möglichkeiten des vi.
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öckenSchreiben 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.
Den vi starten
Programmaufruf: 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.
Aufrufparameter
-r | (recovery) Stellt die letzte Datei nach einem Absturz wieder her |
Hilfen
man vi | Manualpage von vi aufrufen |
:h <Stichwort> | Hilfe aufrufen (mit :q verlassen) |
vimtutor | Lernprogramm |
Cursorpositionierung
Normalerweise ist der vi an die Pfeiltasten der Tastatur richtig angepasst. Daneben gibt es noch folgende Möglichkeiten (Auswahl):
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 |
nG | (Go) Gehe zu Zeile n. n ist eine Zeilennummer. Fehlt die Zahl, wird zur letzten Zeile der Datei gesprungen. |
% | sucht zur aktuellen Klammer die korrespondierende öffnende bzw. 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
|
Befehle im Befehls-Modus
Die Befehle des Befehls-Modus haben normalerweise folgendes Format:
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
:q | vi beenden (wenn keine Änderungen) |
:q! | vi beenden und Änderungen verwerfen |
Dateibefehle
: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.
: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):
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 z.B. eine Nachricht kam) |
Texteingabe
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
~ | 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
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 |
ndd | n 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).
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.
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
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
v | Visuelles Markieren |
mA | Marke A setzen |
'A | Zur Marke A springen |
d'A | Bis Marke A löschen |
y'A | Kopieren bis Marke A |
Einrücken und klammern
<< | 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 |
Einstellungen
- Durch das Belegen von vi-Optionen (Kommando :set) mit einem Wert oder das Setzen von Optionen kann die Arbeitsweise des Editors beeinflußt werden.
- Die Kommandos set können in ein File mit dem Namen $HOME/.exrc eingetragen werden, welches bei jedem vi-Editoraufruf abgearbeitet wird.
:set all | Anzeige Belegung aller Optionen |
:set number | Zeilennummern anzeigen |
:set nonumber | Zeilennummern nicht anzeigen |
:set ignorecase | Beim Suchen soll nicht zwischen Groß- und Kleinbuchstaben unterschieden werden |
:set noignorecase | Beim Suchen soll zwischen Groß- und Kleinbuchstaben unterschieden werden |
:set showmatch | Bei Eingabe einer schließenden Klammer wird die dazugehörige öffnende Klammer angezeigt |
:set noshowmatch | Keine Klammernprüfung |
:set autoindent | Automatische Einrückung |
:set noautoindent | Keine automatische Einrückung |
:set wrapmargin=n | Ab n Zeichen vor Zeilenende wird automatisch an einer Wortgrenze getrennt und eine neue Zeile begonnen |
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, z.B.:
"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 (10 Zeilen in Puffer f)
- neue Datei holen, z. B.: :e bar.txt
- an die gewünschte Stelle gehen und Puffer einfügen: "fp