Vim: Unterschied zwischen den Versionen

Aus Foxwiki
Die Seite wurde neu angelegt: „__NOTOC__ == Inhalt == '''8 Der Bildschirmeditor vi(m)3''' :8.1 Einführung3 ::8.1.1 Den vi starten4 ::8.1.2 Aufrufparameter5 ::8.1.3 Hilfen5 :8.2 Cursor…“
 
K Textersetzung - „== Testfragen ==↵<div class="toccolours mw-collapsible mw-collapsed">↵''Testfrage 1''↵<div class="mw-collapsible-content">'''Antwort1'''</div>↵</div>↵<div class="toccolours mw-collapsible mw-collapsed">↵''Testfrage 2''↵<div class="mw-collapsible-content">'''Antwort2'''</div>↵</div>↵<div class="toccolours mw-collapsible mw-collapsed">↵''Testfrage 3''↵<div class="mw-collapsible-content">'''Antwort3'''</div>↵</div>↵<div class="toccolours mw-collapsible mw-collapsed">↵''Testfrage 4…
 
(81 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
__NOTOC__
{{DISPLAYTITLE:vim}}
== Inhalt ==


'''8 Der Bildschirmeditor vi(m)3'''
'''vim''' ist ein Editor für die Kommandozeile


:8.1 Einführung3
== Beschreibung ==
* Der Texteditor Vi ist ein mächtiges Werkzeug für das Terminal, der in der Unixwelt lange Zeit der Standard war und auch heute immer noch weitverbreitet ist.
* Er ist allerdings proprietäre Software, sodass man im Allgemeinen vom Vim - Vi improved redet, wenn man über den Vi spricht.
** Dies ist ein Open Source-Klon des Vi, der auf jedem Linux-System zu finden ist.
* Auch vom Vim existieren eine Reihe Klone, die aber mehr oder weniger den gleichen Ansatz verfolgen.
** Mit gVim existiert ebenfalls eine Version mit grafischer (GTK-) Oberfläche.


::8.1.1 Den vi starten4
== Installation ==
# '''apt install vim'''


::8.1.2 Aufrufparameter5
== Syntax ==
=== Parameter ===
=== Optionen ===
=== Umgebungsvariablen ===
=== Exit-Status ===


::8.1.3 Hilfen5
== Konfiguration ==
<!--
vim: set ft=mediawiki:
-->


:8.2 Cursorpositionierung6
=== Dateien ===


:8.3 Befehle im Befehls-Modus7
== Anwendungen ==
== Sicherheit ==
== Dokumentation ==
=== Man-Pages ===
=== Info-Pages ===
=== Siehe auch ===


::8.3.1 Allgemeine Befehle7
== Links ==
=== Projekt-Homepage ===
=== Weblinks ===


::8.3.2 Dateibefehle7


::8.3.3 Mehrere Dateien bearbeiten7


::8.3.4 Blättern auf dem Bildschirm8


::8.3.5 Texteingabe8


::8.3.6 Text ändern8
= TMP =
= Syntax =
$ '''vim '''


::8.3.7 Text ausschneiden9
Auf den meisten Systemen ist auch die Kurzform vi ausreichend, die als Alias für vim genutzt wird. Um eine bestimmte Datei zu öffnen oder zu erstellen, setzt man einfach ihren Namen (ggf. inklusive Pfad) hinter den Aufruf:
vi datei_name


::8.3.8 Kopieren und Einfügen9
== Parameter ==
 
== Optionen ==
::8.3.9 Suchen und Ersetzen9
{|class="wikitable sortable"
 
|-
::8.3.10 Sonstige Kommandos10
|  | '''-r ''' || (recovery) Stellt die letzte Datei nach einem Absturz wieder her
 
|-
::8.3.11 Markierungen10
|}
 
::8.3.12 Einrücken und klammern10
 
:8.4 Einstellungen11
 
:8.5 Tipps und Tricks12
 
:8.6 Weblinks13
 
V.102 (16.03.2020)


= Der Bildschirmeditor vi(m) =
= Konfiguration =
siehe [[vim:Konfiguration]]


= Anwendungen =
== Einführung ==
== 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.


[[Image:Grafik2.png|right|top]]
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.
 
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'''
 
 
 
[[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
* Umsetzen von TextblöckenSchreiben und Lesen von Dateien
* Umsetzen von Textblöcken
* Schreiben und Lesen von Dateien
* Löschen von Textblöcken und Aufruf von UNIX-Kommandos
* Löschen von Textblöcken und Aufruf von UNIX-Kommandos
 
'''Eingabemodus'''
<div style="margin-left:1.27cm;margin-right:0cm;"></div>
* Eingabemodus
 
* Einfügen von Text  
* Einfügen von Text  
* Überschreiben vorhandener Textpassagen
* Ü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.&nbsp;B.&nbsp; 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]'''


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.  
* 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.


=== Den vi starten ===
Falls die angegebene Datei nicht existiert, wird auf folgende Art angezeigt, dass es sich um eine neue Datei handelt:
"newfile" [New file]


Programmaufruf:
Nach dem Start ohne Dateinamen, ist die unterste Bildschirmzeile leer.


<div style="margin-left:0cm;margin-right:0cm;">'''vi [Dateiname]'''</div>
=== Hilfen ===
{|class="wikitable sortable"
|-
|  | '''man vi'''
|  | Manualpage von '''vi''' aufrufen
|-
|  | ''':h <Stichwort>'''
|  | Hilfe aufrufen (mit :q verlassen)
|-
|  | '''vimtutor'''
|  | Lernprogramm
|-
|}


[[Image:Grafik4.png|right|top]]Ist die Datei vorhanden, wird sie in den Editorpuffer geladen, andernfalls wird sie neu angelegt.  
=== Befehlsmodus ===
* Direkt nach dem Aufruf befindet sich der Editor im sogenannten Befehlsmodus.  
* In diesem nimmt er Befehle entgegen und führt sie aus.
* Sehr abstrakt betrachtet kann man dieses Vorgehen mit dem Klicken durch die Menüs eines Programms vergleichen.


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.
<table >
  <tr>
    <th> Tastenkürzel </th>
    <th > Aktion </th>
  </tr>


  <tr>
    <td > j</td>
    <td > Schritt abwärts </td>
  </tr>


Am unteren Ende des Bildschirms wird der Dateiname anzeigt, falls eine existierende Datei angegeben wurde. Die Größe der Datei wird ebenfalls angezeigt .
  <tr>
    <td > k </td>
    <td  > Schritt aufwärts </td>
  </tr>


  <tr>
    <td > h </td>
    <td > Schritt nach links </td>
  </tr>


[[Image:Grafik5.png|right|top]]
  <tr>
    <td > l </td>
    <td > Schritt nach rechts </td>
  </tr>


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.
  <tr>
    <td > dd </td>
    <td > löscht eine komplette Zeile an der Cursorposition </td>
  </tr>


  <tr>
    <td > u </td>
    <td > macht letzte Änderung rückgängig </td>
  </tr>


  <tr>
    <td > STRG + R </td>
    <td > macht u rückgängig </td>
  </tr>


  <tr>
    <td > ZZ </td>
    <td > speichert die Datei und beendet Vim </td>
  </tr>
</table>


===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>


Falls die angegebene Datei nicht existiert, wird auf folgende Art angezeigt, dass es sich um eine neue Datei handelt:
  <tr>
    <td > i</td>
    <td > Editiermodus an der Cursorposition starten </td>
  </tr>


"newfile" [New file]
  <tr>
    <td > a </td>
    <td  > Editiermodus eine Stelle hinter der Cursorposition starten  </td>
  </tr>


Nach dem Start ohne Dateinamen, ist die unterste Bildschirmzeile leer.
  <tr>
    <td > o </td>
    <td > Zeile unterhalb der Cursorposition einfügen und Editiermodus starten  </td>
  </tr>


=== Aufrufparameter ===
  <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.


{| style="border-spacing:0;margin:auto;width:17.501cm;"
<table >
|-
  <tr>
| 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>
    <th> Tastenkürzel </th>
| 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
    <th > Aktion </th>
  </tr>


  <tr>
    <td > :w</td>
    <td > Datei speichern  </td>
  </tr>


|-
  <tr>
|}
    <td > :w name </td>
=== Hilfen ===
    <td  > Datei unter name speichern </td>
  </tr>


  <tr>
    <td > :q! </td>
    <td > Vim ohne Speichern beenden  </td>
  </tr>


{| style="border-spacing:0;margin:auto;width:17.501cm;"
  <tr>
|-
    <td > /such_ausdruck </td>
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.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>'''man vi'''</tt>
    <td > Datei nach such_ausdruck durchsuchen </td>
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.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;" | Manualpage von <tt>'''vi'''</tt> aufrufen
  </tr>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.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>''':h <Stichwort>'''</tt>
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Hilfe aufrufen (mit :q verlassen)
|-
| 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.349cm;padding-right:0.349cm;" | <tt>'''vimtutor'''</tt>
| 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.349cm;padding-right:0.349cm;" | Lernprogramm
|-
|}
<div style="text-align:center;">[[Image:Grafik3.png]]</div>
 
== Cursorpositionierung ==


Normalerweise ist der <tt>'''vi'''</tt> an die Pfeiltasten der Tastatur richtig angepasst. Daneben gibt es noch folgende Möglichkeiten (Auswahl):
  <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>


{| style="border-spacing:0;margin:auto;width:17.501cm;"
== Cursorpositionierung ==
Normalerweise ist der '''vi''' an die Pfeiltasten der Tastatur richtig angepasst. Daneben gibt es noch folgende Möglichkeiten (Auswahl):
{|class="wikitable opt2 sortable"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''h '''</tt>
| | '''h '''
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | Zeichen links (auch Backspace)
| | Zeichen links (auch Backspace)
|-
|-
| style="border-top:none;border-bottom:0.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>'''l '''</tt>
| | '''l '''
| style="border-top:none;border-bottom:0.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;" | Zeichen rechts (auch blank)
| | Zeichen rechts (auch blank)
|-
|-
| style="border-top:none;border-bottom:0.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>'''k '''</tt>
| | '''k '''
| style="border-top:none;border-bottom:0.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;" | Zeile höher
| | Zeile höher
|-
|-
| style="border-top:none;border-bottom:0.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>
| | '''j '''
| style="border-top:none;border-bottom:0.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;" | Zeile tiefer
| | Zeile tiefer
|-
|-
| style="border-top:none;border-bottom:0.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>'''b '''</tt>
| | '''b '''
| style="border-top:none;border-bottom:0.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;" | Wortanfang
| | Wortanfang
|-
|-
| style="border-top:none;border-bottom:0.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>'''e '''</tt>
| | '''e '''
| style="border-top:none;border-bottom:0.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;" | Wortende
| | Wortende
|-
|-
| style="border-top:none;border-bottom:0.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>'''w '''</tt>
| | '''w '''
| style="border-top:none;border-bottom:0.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;" | Anfang nächstes Wort
| | Anfang nächstes Wort
|-
|-
| style="border-top:none;border-bottom:0.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>'''H '''</tt>
| | '''H '''
| style="border-top:none;border-bottom:0.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;" | Anfang erste Zeile des Bildschirms
| | Anfang erste Zeile des Bildschirms
|-
|-
| style="border-top:none;border-bottom:0.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>'''L '''</tt>
| | '''L '''
| style="border-top:none;border-bottom:0.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;" | Anfang letzten Zeile des Bildschirms
| | Anfang letzten Zeile des Bildschirms
|-
|-
| style="border-top:none;border-bottom:0.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>'''0 (Null) '''</tt>
| | '''0 (Null) '''
| style="border-top:none;border-bottom:0.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;" | Zeilenanfang
| | Zeilenanfang
|-
|-
| style="border-top:none;border-bottom:0.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:0.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;" | Zeilenende
| | Zeilenende
|-
|-
| style="border-top:none;border-bottom:0.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>'''RETURN '''</tt>
| | '''RETURN '''
| style="border-top:none;border-bottom:0.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;" | nächste Zeile
| | nächste Zeile
|-
|-
| style="border-top:none;border-bottom:0.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><u>'''''n''</u>G '''</tt>
| | <u>'''''n''</u>G '''
| style="border-top:none;border-bottom:0.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;" | (''Go'') Gehe zu Zeile <tt><u>'''''n'''''</u></tt>. <tt><u>'''''n'''''</u></tt> ist eine Zeilennummer. Fehlt die Zahl, wird zur letzten Zeile der Datei gesprungen.
| | (''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.
|-
|-
| style="border-top:none;border-bottom:0.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:0.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;" | sucht zur aktuellen Klammer die korrespondierende öffnende bzw. schließende Klammer
| | sucht zur aktuellen Klammer die korrespondierende öffnende oder schließende Klammer
|-
|-
| style="border-top:none;border-bottom:0.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;" | '''('''
| | '''('''
| style="border-top:none;border-bottom:0.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;" | Cursor zum Anfang des Satzes bewegen  
| | Cursor zum Anfang des Satzes bewegen  
|-
|-
| style="border-top:none;border-bottom:0.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;" | ''')'''
| | ''')'''
| style="border-top:none;border-bottom:0.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;" | Cursor zum Anfang des nächsten Satzes bewegen
| | Cursor zum Anfang des nächsten Satzes bewegen
|-
|-
| style="border-top:none;border-bottom:0.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;" | '''{'''
| | '''{'''
| style="border-top:none;border-bottom:0.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;" | Cursor zum Anfang des Absatzes bewegen
| | Cursor zum Anfang des Absatzes bewegen
|-
|-
| 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;" | '''}'''
| | '''}'''
| 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;" | Cursor zum Anfang des nächsten Absatzes bewegen
| | Cursor zum Anfang des nächsten Absatzes bewegen
 


|-
|-
|}
|}
== Befehle im Befehls-Modus ==
Die Befehle des ''Befehls''-Modus haben normalerweise folgendes Format:


<div style="margin-left:0cm;margin-right:0cm;">[Anzahl] Befehl [Ort] </div>
== 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 <tt>x</tt> das Zeichen unter der Schreibmarke. Wird <tt>10x</tt> eingegeben, werden 10 Zeichen gelöscht.  
* 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.
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 ===
=== Allgemeine Befehle ===
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>
| | :q
| style="border-top:2.5pt solid #000000;border-bottom:0.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 (wenn keine Änderungen)
| | vi beenden (wenn keine Änderungen)
|-
|-
| 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>
| | :q!
| 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  
| | vi beenden und Änderungen verwerfen  
 
 
|-
|-
|}
|}
=== Dateibefehle ===
=== Dateibefehle ===
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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 Datei'''</tt>
| | :r Datei
| style="border-top:2.5pt solid #000000;border-bottom:0.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 aus der angegebenen Datei nach der momentanen Zeile einfügen
| | Text aus der angegebenen Datei nach der momentanen Zeile einfügen
|-
|-
| style="border-top:none;border-bottom:0.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>''':w'''</tt>
| | :w
| style="border-top:none;border-bottom:0.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;" | Datei speichern
| | Datei speichern
|-
|-
| style="border-top:none;border-bottom:0.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>''':w!'''</tt>
| | :w!
| style="border-top:none;border-bottom:0.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;" | Datei speichern und Schreibschutz ignorieren
| | Datei speichern und Schreibschutz ignorieren
|-
|-
| style="border-top:none;border-bottom:0.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>''':w Datei'''</tt>
| | :w Datei
| style="border-top:none;border-bottom:0.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;" | Speichern unter ... (angegebene Datei wird überschrieben)
| | Speichern unter ... (angegebene Datei wird überschrieben)
|-
|-
| style="border-top:none;border-bottom:0.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>''':w >> Datei'''</tt>
| | :w >> Datei
| style="border-top:none;border-bottom:0.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 an die angegebene Datei anhängen
| | Text an die angegebene Datei anhängen
|-
|-
| 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>
| | :wq oder :x oder ZZ
| 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
| | 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.
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>''':e Datei'''</tt>
| | :e Datei
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | Neue Datei bearbeiten
| | Neue Datei bearbeiten
|-
|-
| 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>
| | :n
| 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
| | Wechselt zur nächsten geladenen Datei
 
 
|-
|-
|}
|}
=== Blättern auf dem Bildschirm  ===
=== Blättern auf dem Bildschirm  ===
Normalerweise ist der vi 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):
{|class="wikitable sortable"
 
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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-F '''</tt>
| | STRG-F  
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | Eine Bildschirmseite vorwärts
| | Eine Bildschirmseite vorwärts
|-
|-
| style="border-top:none;border-bottom:0.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-B '''</tt>
| | STRG-B  
| style="border-top:none;border-bottom:0.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;" | Eine Bildschirmseite rückwärts
| | Eine Bildschirmseite rückwärts
|-
|-
| style="border-top:none;border-bottom:0.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-D '''</tt>
| | STRG-D  
| style="border-top:none;border-bottom:0.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;" | Eine halbe Bildschirmseite vorwärts
| | Eine halbe Bildschirmseite vorwärts
|-
|-
| style="border-top:none;border-bottom:0.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-U'''</tt>
| | STRG-U
| style="border-top:none;border-bottom:0.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;" | Eine halbe Bildschirmseite rückwärts  
| | Eine halbe Bildschirmseite rückwärts  
|-
|-
| 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>
| | STRG-L  
| 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)
| | Bildschirm neu aufbauen (wenn zum Beispiel eine Nachricht kam)
 
 
|-
|-
|}
|}
=== Texteingabe ===
=== Texteingabe ===
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''i'''</tt>
| | i
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | (''insert'') Eingabe links vom Cursor
| | (''insert'') Eingabe links vom Cursor
|-
|-
| style="border-top:none;border-bottom:0.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>'''I '''</tt>
| | I  
| style="border-top:none;border-bottom:0.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;" | Eingaben am Zeilenanfang
| | Eingaben am Zeilenanfang
|-
|-
| style="border-top:none;border-bottom:0.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>'''a'''</tt>
| | a
| style="border-top:none;border-bottom:0.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;" | (''append'') Eingabe rechts vom Cursor
| | (''append'') Eingabe rechts vom Cursor
|-
|-
| style="border-top:none;border-bottom:0.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>'''A '''</tt>
| | A  
| style="border-top:none;border-bottom:0.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;" | (appand) Eingabe am Zeilenende
| | (appand) Eingabe am Zeilenende
|-
|-
| style="border-top:none;border-bottom:0.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>'''o '''</tt>
| | o  
| style="border-top:none;border-bottom:0.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;" | Neue Zeile unter der aktuellen Zeile  
| | Neue Zeile unter der aktuellen Zeile  
|-
|-
| 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>'''O '''</tt>
| | O  
| 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;" | Eingabe in der vorhergehenden Zeile, Spalte 1
| | Eingabe in der vorhergehenden Zeile, Spalte 1
|-
|-
|}
|}
Zeile 320: Zeile 398:


=== Text ändern ===
=== Text ändern ===
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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:2.5pt solid #000000;border-bottom:0.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;" | Wechsel Groß-/Kleinbuchstaben (kein Abschluss mit [ESC])
| | Wechsel Groß-/Kleinbuchstaben (kein Abschluss mit [ESC])
|-
|-
| style="border-top:none;border-bottom:0.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>
| | r  
| style="border-top:none;border-bottom:0.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;" | Zeichen ersetzen (kein Abschluss mit [ESC])
| | Zeichen ersetzen (kein Abschluss mit [ESC])
|-
|-
| style="border-top:none;border-bottom:0.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>
| | R  
| style="border-top:none;border-bottom:0.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;" | Mehrere Zeichen ersetzen
| | Mehrere Zeichen ersetzen
|-
|-
| style="border-top:none;border-bottom:0.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>'''s '''</tt>
| | s  
| style="border-top:none;border-bottom:0.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;" | Ein Zeichen ersetzen und zusätzliche Zeichen anschließend einfügen
| | Ein Zeichen ersetzen und zusätzliche Zeichen anschließend einfügen
|-
|-
| style="border-top:none;border-bottom:0.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>'''cc '''</tt>
| | cc  
| style="border-top:none;border-bottom:0.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;" | Gesamte Zeile ändern
| | Gesamte Zeile ändern
|-
|-
| style="border-top:none;border-bottom:0.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>'''cw '''</tt>
| | cw  
| style="border-top:none;border-bottom:0.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;" | Wort ändern
| | Wort ändern
|-
|-
| style="border-top:none;border-bottom:0.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>'''C'''</tt>
| | C
| style="border-top:none;border-bottom:0.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;" | ab Cursorposition bis Zeilenende ändern
| | ab Cursorposition bis Zeilenende ändern
|-
|-
| 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>
| | J  
| 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)
| | Zeilen verbinden (nächste Zeile anhängen)
 
 
|-
|-
|}
|}
=== Text ausschneiden ===
=== Text ausschneiden ===
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''x '''</tt>
| | x  
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | Zeichen unter dem Cursor löschen
| | Zeichen unter dem Cursor löschen
|-
|-
| style="border-top:none;border-bottom:0.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>'''X '''</tt>
| | X  
| style="border-top:none;border-bottom:0.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;" | Zeichen vor dem Cursor löschen
| | Zeichen vor dem Cursor löschen
|-
|-
| style="border-top:none;border-bottom:0.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>'''dw '''</tt>
| | dw  
| style="border-top:none;border-bottom:0.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;" | ab Cursorposition bis Wortende löschen
| | ab Cursorposition bis Wortende löschen
|-
|-
| style="border-top:none;border-bottom:0.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>'''db '''</tt>
| | db  
| style="border-top:none;border-bottom:0.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;" | ab Cursorposition bis Wortanfang löschen
| | ab Cursorposition bis Wortanfang löschen
|-
|-
| style="border-top:none;border-bottom:0.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><u>'''''n''</u>dd '''</tt>
| | <u>''n''</u>dd  
| style="border-top:none;border-bottom:0.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;" | <tt><u>'''''n'''''</u></tt> ganze Zeile löschen
| | <u>''n''</u> ganze Zeile löschen
|-
|-
| 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>'''D'''</tt>
| | D
| 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;" | Ab Cursor bis Zeilenende löschen
| | Ab Cursor bis Zeilenende löschen
|-
|-
|}
|}
Zeile 378: Zeile 451:


=== 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.&nbsp;B.&nbsp; "'''yw'''", "y$").  
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>).  
* Vor "'''yy'''" kann noch die Anzahl der zu kopierenden Zeilen stehen (z.&nbsp;B.&nbsp; '''12yy''').  
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''yy oder Y'''</tt>
| | yy oder Y
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | (Yank) ganze Zeile in anonymen Puffer kopieren
| | (Yank) ganze Zeile in anonymen Puffer kopieren
|-
|-
| style="border-top:none;border-bottom:0.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>'''yw'''</tt>
| | yw
| style="border-top:none;border-bottom:0.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;" | Bis zum nächsten Wort kopieren
| | Bis zum nächsten Wort kopieren
|-
|-
| style="border-top:none;border-bottom:0.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$'''</tt>
| | Y$
| style="border-top:none;border-bottom:0.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;" | Bis Zeilenende kopieren
| | Bis Zeilenende kopieren
|-
|-
| style="border-top:none;border-bottom:0.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>
| | p
| style="border-top:none;border-bottom:0.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;" | Hinter dem Cursor einfügen  
| | Hinter dem Cursor einfügen  
|-
|-
| 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>
| | P
| 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
| | Vor dem Cursor einfügen
 
 
|-
|-
|}
|}
=== Suchen und Ersetzen ===
=== Suchen und Ersetzen ===
 
Außer 'fx' und 'Fx' 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.  
{|class="wikitable sortable"  
 
 
{| align="center" style="border-spacing:0;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''fx '''</tt>
| | fx  
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | Zeichen <tt>''''x''''</tt> in der momentanen Zeile suchen (vorwärts)
| | Zeichen 'x' in der momentanen Zeile suchen (vorwärts)
|-
|-
| style="border-top:none;border-bottom:0.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>'''Fx '''</tt>
| | Fx  
| style="border-top:none;border-bottom:0.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;" | Zeichen <tt>''''x''''</tt> in der momentanen Zeile suchen (rückwärts)
| | Zeichen 'x' in der momentanen Zeile suchen (rückwärts)
|-
|-
| style="border-top:none;border-bottom:0.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>'''/str '''</tt>
| | /str  
| style="border-top:none;border-bottom:0.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;" | String <tt>''''str''''</tt> vorwärts in der Datei suchen
| | String 'str' vorwärts in der Datei suchen
|-
|-
| style="border-top:none;border-bottom:0.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>'''?str '''</tt>
| | ?str  
| style="border-top:none;border-bottom:0.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;" | String <tt>''''str''''</tt> rückwärts in der Datei suchen
| | String 'str' rückwärts in der Datei suchen
|-
|-
| style="border-top:none;border-bottom:0.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:0.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;" | Letzten Suchbefehl wiederholen (vorwärts)
| | Letzten Suchbefehl wiederholen (vorwärts)
|-
|-
| style="border-top:none;border-bottom:0.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:0.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;" | Letzten Suchbefehl wiederholen (rückwärts)
| | Letzten Suchbefehl wiederholen (rückwärts)
|-
|-
| 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'''
| | :%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'
| | Ersetzt alle 'X' durch 'Y'
 
 
|-
|-
|}
|}
=== Sonstige Kommandos ===
=== Sonstige Kommandos ===
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''u '''</tt>
| | u  
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | Letzten Befehl rückgängig machen
| | Letzten Befehl rückgängig machen
|-
|-
| style="border-top:none;border-bottom:0.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>'''U '''</tt>
| | U  
| style="border-top:none;border-bottom:0.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;" | Aktuelle Zeile wiederherstellen
| | Aktuelle Zeile wiederherstellen
|-
|-
| style="border-top:none;border-bottom:0.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:0.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;" | Letztes Kommando wiederholen
| | Letztes Kommando wiederholen
|-
|-
| style="border-top:none;border-bottom:0.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>''':!cmd'''</tt>
| | :!cmd
| style="border-top:none;border-bottom:0.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;" | Verlässt vi temporär und führt das Kommando ''cmd'' aus (ggf. Rückkehr mit exit)
| | Verlässt vi temporär und führt das Kommando ''cmd'' aus (ggf. Rückkehr mit exit)
|-
|-
| style="border-top:none;border-bottom:0.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!cmd'''</tt>
| | :r!cmd
| style="border-top:none;border-bottom:0.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;" | Fügt die Ausgabe von ''cmd'' ab Cursorposition ein
| | Fügt die Ausgabe von ''cmd'' ab Cursorposition ein
|-
|-
| style="border-top:none;border-bottom:0.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>'''!!cmd'''</tt>
| | !!cmd
| style="border-top:none;border-bottom:0.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;" | Benutzt aktuelle Zeile als Eingabe für ''cmd'' und ersetzt durch dessen Ausgabe.
| | Benutzt aktuelle Zeile als Eingabe für ''cmd'' und ersetzt durch dessen Ausgabe.
|-
|-
| 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>
| | Strg + 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;" | Zeilennummer und Dateiinfo zeigen
| | Zeilennummer und Dateiinfo zeigen
 
 
|-
|-
|}
|}
=== Markierungen ===
=== Markierungen ===
 
{|class="wikitable sortable"
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''v'''</tt>
| | v
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | Visuelles Markieren
| | Visuelles Markieren
|-
|-
| style="border-top:none;border-bottom:0.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>'''m<u>''A'''''</u></tt>
| | m<u>''A''</u>
| style="border-top:none;border-bottom:0.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;" | Marke <tt><u>'''''A'''''</u></tt> setzen
| | Marke <u>''A''</u> setzen
|-
|-
| style="border-top:none;border-bottom:0.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>''''<u>''A'''''</u></tt>
| | '<u>''A''</u>
| style="border-top:none;border-bottom:0.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;" | Zur Marke <tt><u>'''''A'''''</u></tt> springen
| | Zur Marke <u>''A''</u> springen
|-
|-
| style="border-top:none;border-bottom:0.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>'''d'<u>''A'''''</u></tt>
| | d'<u>''A''</u>
| style="border-top:none;border-bottom:0.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;" | Bis Marke <tt><u>'''''A'''''</u></tt> löschen
| | Bis Marke <u>''A''</u> löschen
|-
|-
| 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>
| | y'<u>''A''</u>
| 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>
| | Kopieren bis Marke <u>''A''</u>
 
 
|-
|-
|}
|}
=== Einrücken und klammern ===
=== Einrücken und klammern ===
 
{|class="wikitable sortable"
 
|-
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|  | <<
|  | rückt die aktuelle Zeile um eine Einrückungsbreite nach links.
|-
|-
| style="border-top:2.5pt solid #000000;border-bottom:0.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:2.5pt solid #000000;border-bottom:0.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;" | rückt die aktuelle Zeile um eine Einrückungsbreite nach links.
| | rückt die aktuelle Zeile um eine Einrückungsbreite nach rechts.  
|-
|-
| style="border-top:none;border-bottom:0.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:0.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;" | rückt die aktuelle Zeile um eine Einrückungsbreite nach rechts.
| | Bewegt die Einfügemarke zwischen korrespondierenden Klammern
|-
|-
| 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
 
== 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'''
== Einstellungen ==
* zwei aufeinander folgende Zeilen vertauschen: '''ddp'''
* eine Zeile duplizieren: '''yyp'''


<div style="margin-left:0cm;margin-right:0cm;">Durch das Belegen von vi-Optionen (Kommando :set) mit einem Wert oder das Setzen von Optionen kann die Arbeitsweise des Editors beeinflußt werden.</div>
=== Mehrere Zeilen verschieben oder kopieren  ===


<div style="margin-left:0cm;margin-right:0cm;">Die Kommandos set können in ein File mit dem Namen $HOME/.exrc eingetragen werden, welches bei jedem vi-Editoraufruf abgearbeitet wird.</div>
Mehrere Zeilen werden durch Voranstellen der Zeilenzahl vor "'''dd'''</tt>" oder "<tt>'''yy'''" in den Puffer g'''ebracht. 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:


{| style="border-spacing:0;margin:auto;width:17.492cm;"
{|class="wikitable sortable"
|-
|-
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.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 all'''
| | '''"ayy'''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.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;" | Anzeige Belegung aller Optionen
| | kopiere Zeile in Puffer '''a'''
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.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 number'''
| | '''"b6yy'''
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Zeilennummern anzeigen
| | kopiere die nächsten 6 Zeilen in Puffer '''b'''
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.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 nonumber'''
| | '''"ap'''
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Zeilennummern nicht anzeigen
| | Inhalt Puffer '''a''' nach dem Cursor einfügen
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.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 ignorecase'''
|}
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Beim Suchen soll nicht zwischen Groß- und Kleinbuchstaben unterschieden werden
 
|-
=== Blöcke von einer Datei in die andere übertragen ===
| style="background-color:transparent;border-top:none;border-bottom:0.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 noignorecase'''
* Mit dem Kommando ''':e <dateiname>''' kann eine neue Datei bearbeitet werden, ohne den vi zu verlassen.
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Beim Suchen soll zwischen Groß- und Kleinbuchstaben unterschieden werden
* vi mit der ersten Datei aufrufen, z.&nbsp;B.&nbsp;: '''vi foo.txt'''
|-
* Textblock mit den Yank-Kommando in einen Puffer schreiben: '''"f10yy'''</tt> (10 Zeilen in Puffer <tt>'''f''')
| style="background-color:transparent;border-top:none;border-bottom:0.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 showmatch'''
* neue Datei holen, z.&nbsp;B.&nbsp;: ''':e bar.txt '''
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Bei Eingabe einer schließenden Klammer wird die dazugehörige öffnende Klammer angezeigt
* an die gewünschte Stelle gehen und Puffer einfügen''': "fp '''
|-
 
| style="background-color:transparent;border-top:none;border-bottom:0.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 noshowmatch'''
= Links =
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Keine Klammernprüfung
== Dateien ==
|-
== Man-Pages ==
| style="background-color:transparent;border-top:none;border-bottom:0.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 autoindent'''
== Intern ==
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Automatische Einrückung
# [[gvim]]
|-
 
| style="background-color:transparent;border-top:none;border-bottom:0.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 noautoindent'''
== Weblinks ==
| style="background-color:transparent;border-top:none;border-bottom:0.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;" | Keine automatische Einrückung
# http://vim.wikia.com
|-
# https://vim.fandom.com/wiki/Search_and_replace
| 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'''
# http://wiki.ubuntu-forum.de/index.php?title=Vim
| 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
# https://linuxwiki.de/Vim
 
=Kontrollfragen=
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>
 
= TMP =
{{Dieser Artikel|behandelt den Texteditor. Zu weiteren Bedeutungen siehe [[VIM]].}}
{{Infobox Software
| Logo                        = [[Datei:Vimlogo.svg|64px|Vim Logo]]
| Programmiersprache          = <!-- Wikidata -->
| Hersteller                  = [[Bram Moolenaar]] und andere
| AktuelleVersion              = <!-- Wikidata -->
| AktuelleVersionFreigabeDatum = <!-- Wikidata -->
| Betriebssystem              = [[Microsoft Windows|Windows]], [[Linux]], [[macOS]], [[Mac OS (Classic)|Mac OS]], [[AmigaOS]] u. v. m.
| Kategorie                    = [[Texteditor]]
| Lizenz                      = [[GNU General Public License|GPL]]-kompatibel ([[Careware|Charityware]])
| Deutsch                      = teilweise
| Website                      = [https://www.vim.org/ www.vim.org]
}}
 
'''Vim''' ([[Vim#Vi IMproved|Vi IMproved]]) ist eine Weiterentwicklung des [[Texteditor]]s [[vi]]. Das [[Free/Libre Open Source Software|freie Open-Source]]-Programm wurde 1991 von [[Bram Moolenaar]] veröffentlicht. Seitdem wird der Editor aktiv weiterentwickelt. Wie vi zeichnet sich Vim durch seine verschiedenen Betriebs-[[Vim#Modi|Modi]] aus, während viele andere gebräuchliche Editoren nur einen kombinierten Modus für Eingabe und Befehle kennen, in dem Befehle über Tastenkombinationen und grafische Oberflächen ausgeführt werden.
 
== Vi IMproved ==
Vim funktioniert wie der [[vi]]-Editor im [[Textmodus]] auf jedem [[Terminal (Computer)|Terminal]]. Die Bedienung erfolgt dann üblicherweise über die [[Tastatur]], eine Maus wird zwar auf vielen Terminals unterstützt, ihre Verwendung ist aber limitiert. Das ist zum einen historisch bedingt durch die zu Ur-vi-Zeiten Mitte der 1970er Jahre üblichen Bildschirmterminals mit einer langsamen, [[Serielle Datenübertragung|seriellen]] Verbindung zum [[Hostrechner|Hauptrechner]], zum anderen schätzen erfahrene Benutzer die Effizienzvorteile der mächtigen Tastatursteuerung („vi is at your fingertips“). Aus der Limitierung damaliger Terminals resultiert sein [[Vim#Modi|modales Konzept]]. Vim ist nahezu vollständig abwärtskompatibel zu vi, hat jedoch eine Vielzahl an Weiterentwicklungen und eine moderne [[Grafische Benutzeroberfläche|grafische Benutzerschnittstelle]] mit [[Menü (Computer)|Menüs]] (GVim) sowie eine vereinfachte Version für Einsteiger (eVim).
 
Vim kann auf vielen [[Betriebssystem]]en genutzt werden und ist auf fast jedem GNU/[[Linux]]-Rechner zu finden. In der Regel wird beim Aufruf ''vi'' unter Linux Vim über eine [[Symbolische Verknüpfung|Verknüpfung]] oder einen [[Alias (Unix)|Alias]] aufgerufen. Welcher vi-Ableger gestartet wurde, lässt sich im Kommando-Modus über den Befehl '':version'' überprüfen.
 
== Geschichte ==
=== Historischer Exkurs zu ed/vi ===
Anfang der 1970er Jahre war ''[[Ed (Texteditor)|ed]]'' von [[Ken Thompson]] der [[Unix]]-Standardeditor.
Er arbeitete zeilenorientiert, d. h. die Anzeige des Textes erfolgte nicht wie heute gewohnt mehrzeilig, sondern sie musste über explizite Ausgabebefehle angewiesen werden (da die Ausgabe häufig nicht auf einem Bildschirm, sondern einem [[Fernschreiber]] erfolgte). Um mit den begrenzten Möglichkeiten einer Zeile arbeiten zu können, war es notwendig, einen Editier- und einen Kommandomodus zu verwenden (''modaler'' Editor).
 
Die ed-Kommandos bestanden normalerweise aus einem Buchstaben, dem ein Zeilenbereich vorangestellt werden konnte. Als [[Bill Joy]] ab 1976 ''[[vi]]'' entwickelte, stellte dieser – als ''visueller'' Editor – einen wesentlichen Fortschritt gegenüber ed dar, da er Änderungen am editierten Text im Kontext umgebender Zeilen darstellte. Dabei erbte vi das modale Konzept, die Zeilenorientierung und die Kommandos. Diese ed-Kommandos finden sich in allen aktuellen vi-[[Kompatibilität (Technik)|kompatiblen]] Editoren, wie auch in Vim, wieder.
 
=== Entwicklung des Vim ===
[[Datei:Vim-SplitScreen-wHelp.png|mini|Bild 1: GVim-Split-Screen, oben Quelltext dieses Artikels, unten die Vim-Hilfe]]
 
Bram Moolenaar wollte Ende der 1980er Jahre gerne auf einem [[Amiga]]-Computer den Editor benutzen, welchen er von Unix her kannte und gewohnt war. Allerdings gab es damals keinen vi für den Amiga. So entwickelte er auf Basis des vi-Klones ''Stevie'' 1988 die Version 1.0 von Vim. Dieser hieß zu der Zeit noch ''vi IMitation'', da das Hauptziel zunächst darin bestand, die Funktionalität von vi nachzubilden. Am 2. November 1991 wurde Vim mit Version 1.14 erstmals auf der sogenannten ''[[Fred Fish]] disk #591'', einer Sammlung freier Software für den Amiga, veröffentlicht.<ref name="paul"/> Die Version 1.22 wurde 1992 nach [[Unix]] und [[PC-kompatibles DOS]] (wie [[MS-DOS]]) [[Portierung (Software)|portiert]]. Zu dieser Zeit wurde die Langform der Abkürzung in ''Vi IMproved'' geändert. Die Großbuchstaben sollen dabei das Kürzel Vim erklären: VIM ist ''V''i ''IM''proved (improved, [[Englische Sprache|engl.]] für verbessert).
 
In den folgenden Jahren erfuhr Vim umfassende Verbesserungen. Ein Meilenstein war die Einführung der mehrfachen Editier-Fenster in der Version 3.0 (1994) (Bild 1). Mit vi konnte man zwar auch mehrere Dateien mit einem Aufruf editieren, aber man konnte immer nur eine Datei davon sehen und nicht mehrere gleichzeitig. Mit der Version 4.0, die 1996 erschien, war erstmals auch eine grafische Benutzeroberfläche verfügbar, an der Robert Webb großen Anteil hatte. Seit 1998 beherrscht Vim (in der Version 5.0) [[Syntaxhervorhebung|Syntax-Einfärbung]] (Bild 2a).
 
Als bisher letzter großer Schritt wurden 2001 mit der Version 6.0 [[Code-Faltung]], [[Plug-in]]s, Unterstützung für Mehrsprachigkeit und vertikal aufgeteilte Fenster eingeführt (Bilder 2 bis 5). Die Version 6.4 (erschienen im Oktober 2005) behebt viele Fehler, fügt aber keine neuen Funktionen hinzu. Dies war Version 7.0 im Mai 2006 vorbehalten; sie verfügt über eine integrierte Rechtschreibprüfung und unterstützt [[Registerkarte|Reiter]] (Tabs). Die Version 7.3 erschien im August 2010. Sie enthielt als größere Neuerungen (neben allen Patches, die sich ab Version 7.2 angesammelt haben) komplette [[Undo]]-Verzweigungen (mehrstufiges Undo beherrscht Vim seit langem), Blowfish-Kryptografie, [[Lua]]- und [[Python (Programmiersprache)|Python-3]]-Skriptfähigkeit sowie die Möglichkeit, Texte zu verbergen. Im August 2013 wurde die Version 7.4 veröffentlicht. Neu in dieser Version ist ein verbesserter [[Regulärer Ausdruck|RegEx]]-[[Parser]]. Die bislang letzte Version, Vim 8, erschien am 12. September 2016. Sie enthält unter anderem neue Features wie die Unterstützung von [[JSON]].
 
==== Versionierung ====
Während zwischen kleinen Versionssprüngen (zum Beispiel von Version 7.1 auf Version 7.2) oft mehrere Monate vergehen, wird Vim dennoch kontinuierlich entwickelt. Die Vim-Benutzergemeinschaft steuert Fehlerbehebungen oder kleine Verbesserungen in Form von [[Patch (Software)|Patches]] bei, die dann mehrmals im Monat in den Vim-Code einfließen.<ref name="readme"/>
 
== Funktionalität ==
=== Überblick: Ausgewählte Eigenschaften und vi-Erweiterungen ===
[[Datei:Screenshot-vim2.png|mini|Bild 2a: Vim mit einigen Features: Zeilennummerierung, Unicode, Syntaxhervorhebung und Text-Faltung]]
[[Datei:screenshot vim7 word completion.png|mini|Bild 2b: Neue Vim-7-Funktionen: Rechtschreibprüfung und Wortvervollständigung mit Dropdown-Menü]]
 
* integrierte Rechtschreibprüfung
* Wortvervollständigung mit Dropdown-Menü
* Anordnung mehrerer Dateien in [[Registerkarte|Tabs]]
* mehrfache [[Puffer (Informatik)|Puffer]]- und Split-Screens, mehrere Editier-Fenster, auch vertikal
* Text-Formatierungen und [[Vim#Visueller Modus|Visual Mode]], zum Beispiel mit Blockoperationen
* unbegrenztes [[Undo]] (Rückgängig machen) und [[Redo]] (Wiederherstellen) auch, wenn Vim zwischendurch beendet wurde
* umfangreiche Online-Hilfe
* [[Syntaxhervorhebung]] abhängig von der [[Programmiersprache]] für etwa 500 Sprachen und Dateitypen
* eigene [[Skriptsprache]] zur Funktions-Erweiterung (analog zu [[Plug-in]]s)
* [[Autovervollständigung|Komplettierung]] von Kommandos, Wörtern oder Dateinamen
* Editieren von Archiven ([[Tar (EDV)|tar]], [[Gzip|gz/tgz]], [[ZIP-Dateiformat|zip]])
* Auto-Kommandos (z.&nbsp;B.&nbsp; [[Datenkompression|Dekompression]] von gezippten Dateien vor dem Editieren)
* Dateiformat-Erkennung und -Konvertierung
* History-Mechanismus für Kommandos, Suchbegriffe usw.
* Aufzeichnung und Ausführung von [[Makro]]s
* Speichern und Laden von [[Sitzung (Informatik)|Sitzungseinstellungen]]
* optionale Integration von [[Perl (Programmiersprache)|Perl]], [[Python (Programmiersprache)|Python 2 und 3]], [[Lua]], [[Ruby (Programmiersprache)|Ruby]] und [[Tcl]]
* Kryptografie mit dem [[Blowfish]]-Algorithmus
* Unterstützung von [[Bidirektionaler Text|bidirektionalem Text]] (u. a. Arabisch)
* automatisches und manuelles [[Code-Faltung|Zusammenfalten]] von Textteilen zur besseren Übersicht
* einfaches Ansprechen von Debuggern, Make-Programmen und Toolchains aus dem Editor heraus
* Interprozesskommunikation und Job-Kontrolle über Sockets und Pipes („Channels“)
* Terminal-Integration
 
Die Leistungsfähigkeit von Vim soll an einigen markanten vi-Verbesserungen dargestellt werden.
 
=== Vim-Hilfefunktion ===
[[Datei:Vim-HelpgrepCmd-wQuickfixList.png|mini|links|Bild 3: GVim-Hilfe: Suche mittels ':helpgrep evim', unten gefundene Stellen, oben Hilfe-Text zur ausgewählten Fundstelle]]
 
Vim besitzt eine umfassende Dokumentation. Der Nutzer wird bei der Suche nach Lösungen zu seinem Problem durch verschiedene Funktionen unterstützt. Durch [[Syntaxhervorhebung]] und eine eigene Hilfe-[[Syntax]] werden Schlüsselbegriffe farbig hervorgehoben (Bild 1). Im Bild sind diese Begriffe grün dargestellt und werden in der Kommandozeilenversion in zwei senkrechte Striche eingeschlossen. Über Tastenkürzel kann zwischen diesen Schlüsselwörtern vorwärts und rückwärts navigiert werden, ähnlich wie in einem [[Webbrowser]]. Das funktioniert in der grafischen Oberfläche bzw. bei entsprechender Unterstützung im Terminal auch mit der Maus per Doppelklick oder rechter Maustaste. Es gibt noch weitere Funktionen, die dem Nutzer das Suchen erleichtern.
Eine wichtige davon ist das '':helpgrep''-Kommando. Dabei kann der Nutzer nach einem Begriff in der gesamten Hilfe suchen, die Treffer in einem weiteren Fenster darstellen lassen und von diesem dann zu den entsprechenden Stellen in der Hilfe wechseln (Bild 3). Die Trefferliste (Bild 3 unten) kann mit der Suchfunktion von Vim nach weiteren Begriffen durchsucht werden. Ergänzt wird die Hilfe durch eine [[Hypertext Markup Language|HTML]]-Version dieser Hilfe im Internet,<ref name="vimdoc"/> eine umfangreiche Sammlung der [[Frequently Asked Questions|häufig gestellten Fragen (FAQ)]], Literatur auf Englisch und Deutsch und vieles mehr.
 
=== Unterstützung für Programmierer ===
Vim ist ein Editor, der ebenso wie vi für Programmierer geschrieben wurde. Daher gibt es die Möglichkeit, über Plugins ''edit-compile-fix'' (deutsch „Editieren-[[Kompilierung|Übersetzen]]-Fehlerkorrektur“)-Funktionalitäten nachzurüsten. Ähnlich wie bei einer [[Integrierte Entwicklungsumgebung|integrierten Entwicklungsumgebung]] wird der [[Quelltext]] editiert und dann mittels eines [[Compiler]]s direkt aus Vim heraus übersetzt. Falls beim Kompilieren Fehler aufgetreten sind, werden diese in einem weiteren Fenster angezeigt. Von der Fehlermeldung kann direkt ins andere Fenster zur fehlerhaften Stelle im Quelltext gesprungen und dieser korrigiert werden. Danach kann ein weiterer Zyklus gestartet und es können gegebenenfalls weitere Fehler korrigiert werden. Der Programmierer wird dabei durch die Funktionen Syntaxhervorhebung und Textfaltung unterstützt.<ref name="quickfix"/>
 
=== Dateivergleich ===
[[Datei:Vim-FileDiff-Example.png|mini|links|Bild 4: Datei-Vergleich mit GVim]]
 
Eine weitere häufige Aufgabenstellung besteht im Vergleichen von zwei Versionen einer Datei. Vim bietet hier eine Möglichkeit, die Unterschiede zweier Dateiversionen nebeneinander in zwei Fenstern darzustellen und die Differenzen farbig zu markieren (Bild 4), die typische Aufgabe eines [[Merge]]-Programms. Dabei werden geänderte und eingefügte Zeilen farbig hervorgehoben und Bereiche, die in beiden Versionen gleich sind, durch [[Code-Faltung|Text-Faltung]] ausgeblendet. Im Beispiel sind geänderte Stellen rot gekennzeichnet und eingefügte Zeilen blau bzw. fehlende Zeilen hellblau markiert. ''Gefaltete'' Zeilen sind hier grau unterlegt mit Angabe der Zeilenanzahl, die unverändert sind.
 
=== Vim-Skriptsprache ===
[[Datei:Vim-Skript-Calendar.png|mini|Bild 5: GVim mit Calendar-Skript (links) und dessen Quelltext (rechts)]]
 
Vim ist über die [[Skriptsprache]] ''Vimscript'' erweiter- und programmierbar. Damit lassen sich komplexe Vorgänge automatisieren, die für ein [[Makro]] zu kompliziert wären. Ein Beispiel für ein Vim-Skript ist die Vim-Start-Datei <code>.vimrc</code> unter Unix und GNU/Linux oder <code>_vimrc</code> unter Windows, DOS und OS/2, in der hauptsächlich Konfigurations-Einstellungen vorgenommen werden. Diese wird beim Start von Vim automatisch ausgeführt. In der Vim-Skriptsprache sind alle [[Vim#Kommandozeilenmodus|Kommandozeilen]]-Befehle verfügbar und über das Kommando ':normal' auch alle [[Vim#Normalmodus|Normalmodus]]-Befehle. Es gibt mehrere [[Datentyp]]en: Fließkommazahlen, ganze Zahlen, Zeichenketten, Listen und assoziative Arrays. [[Boolesche Algebra|Boolesche Werte]] werden über ganze Zahlen realisiert, wobei eine Null als ''falsch'' gewertet wird und alle anderen Zahlen als ''wahr''. Es sind die wichtigsten [[Logischer Operator|Operatoren]] für Vergleiche, [[logische Verknüpfung]]en und [[Grundrechenart]]en vorhanden. Als [[Kontrollstruktur]]en stehen die Entscheidung 'if – then – elseif – else – endif' und die while-Schleife zur Verfügung. Der Nutzer kann eigene [[Funktion (Programmierung)|Funktionen]] definieren und über einhundert vordefinierte Funktionen verwenden, die im Wesentlichen den Unix-[[Systemaufruf]]en entsprechen. Die Skripte können mit einem [[Fehlerbereinigung|Debug]]-Modus getestet werden. Wer plant, ein Vim-Skript zu schreiben, sollte vorher auf der Vim-Skript-Seite<ref name="scripts"/> nachsehen, ob es nicht schon ein Skript mit der entsprechenden Funktionalität gibt. Obwohl es dort viele Skripte zur Unterstützung von Programmieraufgaben gibt, lohnt sich auch für Nicht-Programmierer ein Blick auf diese Seite. Nicht zuletzt kann jeder Nutzer, der ein Problem von allgemeinem Interesse gut gelöst hat, sein Skript anderen zur Verfügung stellen. Als Beispiel für ein Vim-Skript soll das Kalender-Skript<ref name="calendar"/> dienen (Bild 5).


=== Einsteigerfreundliche Modifikationen ===
Im Laufe der Jahre wurden für Vim einige Modifikationen entwickelt, welche die Benutzung dieses Editors für ungeübte Benutzer einfacher machen sollen. Die bekanntesten sind der in Vim integrierte ''easy-Vim''-Modus und das [[Grafische Benutzeroberfläche|GUI]] ''GVim''.


|-
==== GVim ====
|}
Mit ''GVim'' steht Vim unter den meisten aktuellen Betriebssystemen eine grafische Oberfläche zur Verfügung, die viele Befehle des Programms ähnlich den heute gängigen grafischen Texteditoren auch über Menüeinträge und eine Werkzeugleiste zugänglich macht. Über seine Konfigurationsdateien lässt sich GVim, ähnlich Vim, umfassend konfigurieren, auch das Einbinden von Vim-Skripten ist hier möglich. Im Gegensatz zum Vim lassen sich jedoch mehr Farben und Schriftarten für die Darstellung von Textdateien einstellen sowie fertige Farbschemata erstellen und nutzen.
== {{anchor|RefHeading397871708724582}} Tipps und Tricks ==


'''Zeile verschieben'''* Zeile mit <tt>'''dd'''</tt> löschen
==== eVim ====
* Zur neuen Position wechseln
''eVim'' (kurz für ''easy Vim'')<ref name="evim"/> ist ein einfacher Modus, in dem Vim betrieben werden kann. Wird Vim in diesem Modus gestartet, so ist sofort der Einfüge-Modus aktiv; Befehle können nur über einen speziellen Befehlsmodus eingegeben werden. Auf diese Weise kann Vim fast wie ein nicht modaler Editor verwendet werden.
* mit p (hinter dem Cursor)''' '''
* <tt>'''P'''</tt> (vor dem Cursor) einfügen


==== Cream ====
Mit der GVim-Erweiterung ''Cream'' ist es schließlich möglich, Vim vollständig auf eine Weise zu nutzen, die bisherigen Nutzern einfacherer Editoren (wie [[gedit]] oder dem [[Microsoft Editor|Microsoft Notepad]]) vertraut ist. Es handelt sich um eine Reihe von Skripten zur weiteren Vereinfachung von GVim. So können praktisch alle wichtigen Kommandos mit der Maus über Menüs erreicht werden, und die Betriebs-Modi entfallen in der Defaultausführung gänzlich (können aber nach Belieben hinzugeschaltet werden). ''Cream'' ist weder in Vim noch in ''GVim'' integriert, sondern setzt auf beiden auf, ohne sie dabei zu ersetzen, d. h. auch die gleichzeitige Verwendung von ''Cream'' und ''GVim'' ist problemlos möglich.<ref name="cream"/>


== Modi ==
Vim ist ein ''modaler Editor''. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen. Die sechs Grundmodi sollen hier nur kurz erklärt werden. Zu den ersten drei Modi siehe auch [[Vi#Arbeitsmodi|vi: Arbeitsmodi]]. Es gibt noch fünf weitere Modi, auf die hier aber der Einfachheit halber nicht eingegangen werden soll. Diese sind Varianten der Grundmodi.<ref name="modes"/>


'''Zeile kopieren'''* Zeile mit <tt>'''yy'''</tt> in den Puffer kopieren
=== Normalmodus ===
* Zur neuen Position wechseln
Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der ''zentrale Modus'', von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der {{Taste|[[Escape-Taste|Esc]]}}-Taste gelangt man immer in den Normalmodus zurück. Falls man sich nicht sicher ist, ob man sich bereits im Normalmodus befindet, kann man jederzeit die {{Taste|Esc}}-Taste drücken. War man bereits im Normalmodus, wird dies im Normalfall, je nach Vim-Konfiguration und Terminal-Einstellungen, mit einem Piepton signalisiert.
* Zeile mit p (vor dem Cursor)
* oder P (nach dem Cursor) einfügen


=== Einfügemodus ===
Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt.
Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über '''i''' (für engl. insert = einfügen). Es gibt eine Vielzahl anderer Befehle, um in diesen Modus zu gelangen.


Im Einfügemodus werden (fast) alle Tastatureingaben in den editierten Text übernommen, und nur ganz wenige Tasten und -kombinationen haben eine andere Wirkung. Die Wichtigste ist die {{Taste|Esc}}-Taste zur Beendigung des Einfügemodus. Anschließend sind die Normalmodus-Befehle wieder verfügbar.


'''Ein paar einfache Tricks'''* zwei '''aufeinander folgende Zeichen vertauschen: <tt>xp'''</tt>
Eine weniger verbreitete, alternative Sichtweise verzichtet darauf, das Einfügen von Text als eigenständigen Modus zu betrachten. Gemäß dieser Sichtweise existieren lediglich eine Reihe von ''Textänderungs-Befehlen'', denen unmittelbar eine Eingabe folgt, welche mit {{Taste|Esc}} abzuschließen ist. Ein Vorteil dieser Sichtweise ist, dass niemals Zweifel aufkommen, ob momentan der ''Normalmodus'' gewählt ist, und auch das Potenzial der Befehlswiederholung erschließt sich in dieser Sichtweise eher.
* zwei aufeinander folgende Zeilen vertauschen: <tt>'''ddp'''</tt>
* eine Zeile duplizieren: <tt>'''yyp'''</tt>


=== Kommandozeilenmodus ===
Dieser Modus wird durch den einleitenden Doppelpunkt ''':''' erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden ''[[Eingabetaste|Enter]]'' wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos '''/''' (Textmuster vorwärts suchen), '''?''' (Textmuster rückwärts suchen) und das Filter-Kommando '''!''', mit dem die [[UNIX-Kommandos]] (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.


=== Visueller Modus ===
Dieser Modus ist eine Verbesserung von Vim und ähnelt dem Normalmodus. Mit der Maus oder bestimmten Tastenkürzeln wird ein Bereich zeilenweise, zeichenweise oder blockweise markiert und visuell hervorgehoben. Auf diesen Bereich können dann die Kommandos des Normal- sowie des Kommandozeilen-Modus angewandt werden. Die Arbeit mit diesem Modus ist einfacher als mit dem Normalmodus, da man genau sieht, welchen Bereich man gerade bearbeitet.


'''Mehrere Zeilen verschieben oder kopieren: '''
=== Auswahlmodus ===
Dieser Modus ähnelt dem insbesondere von Windows-Programmen gewohnten GUI-Verhalten, wo man einen Bereich mit Maus oder Shift+Pfeiltasten markiert. Gibt man nun ein druckbares Zeichen ein, so wird der selektierte Bereich gelöscht und gleichzeitig in den Einfüge-Modus gewechselt. Das heißt, der selektierte Bereich wird mit dem eingegebenen Text überschrieben. Einfacher ist der Auswahlmodus über die Tastenkombination [[Umschalttaste]]-[[Pfeiltaste]]n erreichbar. Allerdings muss Vim dazu entsprechend konfiguriert werden. Beendet wird dieser Modus wie üblich mit der {{Taste|Esc}}-Taste. Auch dieser Modus ist eine Vim-Erweiterung.


Mehrere Zeilen werden durch Voranstellen der Zeilenzahl vor "<tt>'''dd'''</tt>" oder "<tt>'''yy'''</tt>" in den Puffer g'''ebracht. Alles weitere wie oben. '''
=== Ex-Modus ===
Dieser Modus ähnelt dem Kommandozeilenmodus, mit dem Unterschied, dass nach Ausführung eines Kommandos nicht in den Normalmodus zurück gewechselt wird. Dieser Modus stammt aus dem UNIX-Zeileneditor ''[[ex (Texteditor)|ex]]'' (wie auch der traditionelle vi-Editor).


'''Weitere Puffer:'''
== Verfügbarkeit ==
Vim ist unter vielen [[Betriebssystem]]en lauffähig. Vor allem für [[unixoide Systeme]] existieren [[Portierung (Software)|Portierungen]], beispielsweise für die [[UNIX]]- bzw. [[Berkeley Software Distribution|BSD]]-Derivate [[AIX]] [[IRIX]], [[HP-UX]], [[macOS]] und [[iOS (Betriebssystem)|iOS]] und freie BSD-Distributionen wie [[FreeBSD]] sowie für [[Linux]]-basierende Systeme einschließlich [[Android (Betriebssystem)|Android]].<ref>Paul Bailey: [https://opensource.com/article/18/5/termux ''Termux turns Android into a Linux development environment''], opensource.com, abgerufen am 28. August 2019.</ref> [[Microsoft Windows|Windows]] wurde seit 3.1 unterstützt, Vim 8 benötigt [[Microsoft Windows XP|Windows XP]] und aufwärts. Auch für [[Virtual Memory System|VMS]], [[RISC OS]], [[MorphOS]], [[AmigaOS]], Atari [[MiNT]], [[Mac OS (Classic)|klassisches Mac OS]], [[Haiku (Betriebssystem)|Haiku]] und [[BeOS]], [[NeXTStep]], [[OS/2]] sind (oder waren) Portierungen verfügbar.


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.:
== Auszeichnungen ==
Vim war Gewinner des ''Readers’ Choice Awards''<ref name="readersChoice"/> in der Kategorie ''Favorite Text Editor'' in den Jahren 2001 bis 2005 und erhielt 2000 den ''Slashdot Beanie Award'' als ''Best Open Source Text Editor'' sowie 1999 den ''Linuxworld Editors' Choice Award''. Im Mai 2008 erhielt Bram Moolenaar für seine Arbeit an Vim den ''NLUUG Award'', eine Auszeichnung der niederländischen [[Unix User Group]].<ref name="nluug"/>


== Lizenz ==
Vim steht unter einer [[GNU General Public License|GPL]]-kompatiblen [[Charityware]]-Lizenz (charity, engl.: Nächstenliebe). Das bedeutet, dass Vim frei verteilt werden darf, jedoch erbittet der Entwickler bei Gefallen eine Spende für Waisenkinder in [[Uganda]] durch das ICCF Holland.<ref name="iccf"/>


{| style="border-spacing:0;margin:auto;width:17.501cm;"
== Entwickler und Community ==
|-
Vim wird hauptsächlich von [[Bram Moolenaar]] und einer [[Online-Community|Community]] von vielen Freiwilligen entwickelt. Die Hilfeseite der aktuellen Version nennt über 60 Mitwirkende namentlich.<ref name="credits"/> Es gibt eine große Anzahl ungenannter Helfer, die sich nicht nur um die Weiterentwicklung des Vim kümmern, sondern auch um die [[Portierung (Software)|Portierung]] auf andere Betriebssysteme, um Programmtests und das Sammeln von [[Programmfehler|Bugs]], die Vervollständigung der Dokumentation und die Übersetzung der Hilfeseiten. Außerdem übernehmen sie die Beantwortung von Nutzeranfragen und die Einbindung des Vim in andere Projekte.
| style="border-top:2.5pt solid #000000;border-bottom:0.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>'''"ayy'''</tt>
| style="border-top:2.5pt solid #000000;border-bottom:0.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;" | kopiere Zeile in Puffer <tt>'''a'''</tt>
|-
| style="border-top:none;border-bottom:0.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>'''"b6yy'''</tt>
| style="border-top:none;border-bottom:0.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;" | kopiere die nächsten 6 Zeilen in Puffer <tt>'''b'''</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>'''"ap'''</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;" | Inhalt Puffer <tt>'''a'''</tt> nach dem Cursor einfügen
|-
|}
'''Blöcke von einer Datei in die andere übertragen:'''* Mit dem Kommando <tt>''':e <dateiname>'''</tt> kann eine neue Datei bearbeitet werden, ohne den vi zu verlassen.
* vi mit der ersten Datei aufrufen, z. B.: <tt>'''vi foo.txt'''</tt>
* Textblock mit den Yank-Kommando in einen Puffer schreiben: <tt>'''"f10yy'''</tt> (10 Zeilen in Puffer <tt>'''f'''</tt>)  
* neue Datei holen, z. B.: <tt>''':e bar.txt '''</tt>
* an die gewünschte Stelle gehen und Puffer einfügen''': <tt>"fp '''</tt>


Andererseits entstand, wie auch im Fall von [[Emacs]], über die Zeit eine ganze Reihe von [[Abspaltung (Softwareentwicklung)|Abspaltungen]], häufig mit recht deutlichen Unterschieden in Motivation und Zielsetzung, Pflege und Weiterentwicklung wie auch dem Versuch, Kompatibilität zu Vim und seinen Erweiterungen zu wahren und sich gleichzeitig voneinander abzugrenzen. Größere Aufmerksamkeit in diesem Sinne erlangte Neovim, das sich in erster Linie als Weiterentwicklung und [[Refactoring]]-Projekt versteht und darum bemüht ist, den Editor durch Aussparen so verstandener Legacy-Teile, oder heute seltener benutzten Funktionen, zu verschlanken.<ref>[https://neovim.io/charter/ ''About Neovim''], neovim.io/charter/, abgerufen am 30. August 2018.</ref>


== Literatur ==
* {{Literatur
| Autor            = Drew Neil
| Titel            = Modern Vim: Craft Your Development Environment with Vim 8 and Neovim
| Verlag          = Pragmatic Bookshelf
| Ort              = Raleigh, NC, USA
| Datum            = 2018
| ISBN            = 978-1-68050-262-6
}}
* {{Literatur
| Autor            = Drew Neil
| Titel            = Vim in der Praxis: Blitzschnell Text editieren
| Übersetzer      = Lars Schulten
| Verlag          = O'Reilly Verlag
| Ort              = Köln
| Datum            = 2014
| ISBN            = 978-3-95561-578-9
}}
* {{Literatur
| Autor            = Steve Oualline
| Titel            = Vi IMproved – Vim
| Verlag          = New Riders Publishing
| Ort              = Indianapolis
| Datum            = 2001
| ISBN            = 0-7357-1001-5
| Online          = http://www.truth.sk/vim/vimbook-OPL.pdf
| Format          = PDF
| KBytes          = 3700
| Sprache          = en
}}
* {{Literatur
| Autor            = Arnold Robbins, Linda Lamb, Elbert Hannah
| Titel            = Learning the vi and Vim Editors
| Verlag          = O'Reilly Verlag
| Datum            = 2008
| ISBN            = 978-0-596-52983-3
}}
* {{Literatur
| Autor            = Arnold Robbins
| Titel            = vi and Vim Editors Pocket Reference
| Verlag          = O'Reilly Verlag
| Datum            = 2011
| Auflage          = 2.
| ISBN            = 978-1-449-39217-8
}}
* {{Literatur
| Autor            = Reinhard Wobst
| Titel            = vim 7.3 GE-PACKT: vi improved
| Auflage          = 4.
| Verlag          = mitp-Verlag
| Datum            = 2012
| ISBN            = 978-3-8266-8190-5
}}


== Weblinks ==
== Weblinks ==
{{Wikibooks|vi-Befehlsreferenz: Übersicht}}
{{Commonscat|Vim}}
* [https://www.vim.org/ Offizielle Website] mit Download-Möglichkeiten, Dokumentationen, Tutorials, Scripts und Verweisen zu Communitys und Wikis (englisch)
* [http://www.moolenaar.net/habits_de.pdf ''Sieben Angewohnheiten für das effektive Editieren von Textdateien'' von Bram Moolenaar] (PDF, ca. 140 kB)
* [http://learnvimscriptthehardway.stevelosh.com/ Learn Vimscript the Hard Way], Onlineausgabe des Buches von Steve Losh (englisch)
* [https://vimawesome.com/ Vim Awesome] Verzeichnis für Vim-Plugins unterschiedlicher Quelle
== Einzelnachweise ==
<references responsive>
<ref name="paul">{{Internetquelle
| url    = http://arstechnica.com/open-source/news/2011/11/two-decades-of-productivity-vims-20th-anniversary.ars
| titel  = Two decades of productivity: Vim's 20th anniversary
| autor  = Ryan Paul
| datum  = 2011-11-02
| zugriff = 2011-12-08
}}</ref>
<ref name="readme">[ftp://ftp.vim.org/pub/vim/patches/7.4/README Liste der Vim-Patches für Version 7.4]</ref>
<ref name="vimdoc">[http://vimdoc.sf.net Vim documentation]</ref>
<ref name="quickfix">[http://vimdoc.sourceforge.net/htmldoc/quickfix.html ':help quickfix'] in der Vim-Online-Dokumentation zu Version 7.0</ref>
<ref name="scripts">[http://www.vim.org/scripts/index.php Vim Scripts] auf www.vim.org</ref>
<ref name="calendar">[http://www.vim.org/scripts/script.php?script_id=52 Kalender-Skript für Vim]</ref>
<ref name="evim">[http://man.he.net/?topic=evim&section=all Manpage zu ''eVim'']</ref>
<ref name="cream">[http://cream.sourceforge.net/ ''Cream''] auf [[SourceForge]]</ref>
<ref name="modes">[http://vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ':help vim-modes'] in der Vim-Online-Dokumentation zu Version 7.0</ref>
<ref name="readersChoice">[http://www.linuxjournal.com/article/8520?page=0,3 Linux Journal] vom Dezember 2004</ref>
<ref name="nluug">[http://www.nluug.nl/vereniging/persberichten/award_moolenaar.html Bericht auf der NLUUG-Website] (auf Niederländisch)</ref>
<ref name="iccf">Internetpräsenz des [http://iccf-holland.org ICCF Holland]</ref>
<ref name="credits"><code>:help credits</code> in der Dokumentation zu Version 8.1</ref>
</references>


* [http://vim.wikia.com/ http://vim.wikia.com]
[[Kategorie:VIM]]
[[Kategorie:Linux/Befehl]]
{{DEFAULTSORT:vim}}

Aktuelle Version vom 24. Februar 2024, 16:40 Uhr


vim ist ein Editor für die Kommandozeile

Beschreibung

  • Der Texteditor Vi ist ein mächtiges Werkzeug für das Terminal, der in der Unixwelt lange Zeit der Standard war und auch heute immer noch weitverbreitet ist.
  • Er ist allerdings proprietäre Software, sodass man im Allgemeinen vom Vim - Vi improved redet, wenn man über den Vi spricht.
    • Dies ist ein Open Source-Klon des Vi, der auf jedem Linux-System zu finden ist.
  • Auch vom Vim existieren eine Reihe Klone, die aber mehr oder weniger den gleichen Ansatz verfolgen.
    • Mit gVim existiert ebenfalls eine Version mit grafischer (GTK-) Oberfläche.

Installation

# apt install vim

Syntax

Parameter

Optionen

Umgebungsvariablen

Exit-Status

Konfiguration

Dateien

Anwendungen

Sicherheit

Dokumentation

Man-Pages

Info-Pages

Siehe auch

Links

Projekt-Homepage

Weblinks

TMP

Syntax

$ vim 

Auf den meisten Systemen ist auch die Kurzform vi ausreichend, die als Alias für vim genutzt wird. Um eine bestimmte Datei zu öffnen oder zu erstellen, setzt man einfach ihren Namen (ggf. inklusive Pfad) hinter den Aufruf:

vi datei_name 

Parameter

Optionen

-r (recovery) Stellt die letzte Datei nach einem Absturz wieder her

Konfiguration

siehe vim:Konfiguration

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

man vi Manualpage von vi aufrufen
:h <Stichwort> Hilfe aufrufen (mit :q verlassen)
vimtutor Lernprogramm

Befehlsmodus

  • Direkt nach dem Aufruf befindet sich der Editor im sogenannten Befehlsmodus.
  • In diesem nimmt er Befehle entgegen und führt sie aus.
  • Sehr abstrakt betrachtet kann man dieses Vorgehen mit dem Klicken durch die Menüs eines Programms vergleichen.
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.

Tastenkürzel Aktion
i Editiermodus an der Cursorposition starten
a Editiermodus eine Stelle hinter der Cursorposition starten
o Zeile unterhalb der Cursorposition einfügen und Editiermodus starten
ESC Editiermodus beenden

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.

Tastenkürzel Aktion
:w Datei speichern
:w name Datei unter name speichern
:q! Vim ohne Speichern beenden
/such_ausdruck Datei nach such_ausdruck durchsuchen
:e datei_name Datei datei_name öffnen
:e # zur zuvor bearbeiteten Datei zurückkehren

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 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

: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 zum Beispiel 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

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:
"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

Links

Dateien

Man-Pages

Intern

  1. gvim

Weblinks

  1. http://vim.wikia.com
  2. https://vim.fandom.com/wiki/Search_and_replace
  3. http://wiki.ubuntu-forum.de/index.php?title=Vim
  4. https://linuxwiki.de/Vim

Kontrollfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5

TMP

Vorlage:Dieser Artikel

{{#if: | {{{Name}}} | {{#invoke:WLink|getArticleBase}} }}

{{#if: Vim Logo |

Vim Logo |
 {{#if: {{#invoke:Wikidata|claim|P154}} | 
[[Datei:{{#invoke:Wikidata|claim|P154}}|150px]]
 }}

}}{{#if: |

{{{Screenshot}}}{{#if: |
{{{Beschreibung}}} }}|

}}

Basisdaten

{{#if: |

Maintainer
 {{#if: {{#invoke:Wikidata|claim|P126}} | 
Maintainer claim|P126|parameter=link|references=ja|list=, }}
 }}

}}{{#if: Bram Moolenaar und andere |

Entwickler Bram Moolenaar und andere |
 {{#if: {{#invoke:Wikidata|claim|P178}} | 
Entwickler claim|P178|parameter=link|references=ja|list=, }}
 }}

}}{{#if: |

Erscheinungsjahr
 {{#if: {{#invoke:Wikidata|claim|P577}} | 
Erscheinungsjahr claim|P577|references=ja|list=, }} |
   {{#if: {{#invoke:Wikidata|claim|P571}} | 
Erscheinungsjahr claim|P571|references=ja|list=, }}
   }}
 }}

}}{{#ifeq: | KEINE_ANGABE || {{#if: |

Aktuelle Version
() }}
 {{#if: {{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356}} | 
Aktuelle Version claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356|references=ja}} {{#if: {{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356|qualifier=P577}} |
({{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356|qualifier=P577}}) }}}}}}

}}{{#if: |

Aktuelle Vorabversion
({{{AktuelleVorabVersionFreigabeDatum}}}) }}

}}{{#if: |

Ausführungsumgebung
 {{#if: Windows, Linux, macOS, Mac OS, AmigaOS u. v. m. | 
Betriebssystem Windows, Linux, macOS, Mac OS, AmigaOS u. v. m. |
   {{#if: {{#invoke:Wikidata|claim|P306}} | 
Betriebssystem claim|P306|parameter=link|references=ja|list=, }}
   }}
 }}

}}{{#if: |

Programmiersprache
 {{#if: {{#invoke:Wikidata|claim|P277}} | 
Programmiersprache claim|P277|parameter=link|references=ja|list=, }}
 }}

}}{{#if: Texteditor |

Kategorie Texteditor

}}{{#if: GPL-kompatibel (Charityware) |

Lizenz GPL-kompatibel (Charityware) |
 {{#if: {{#invoke:Wikidata|claim|P275}} | 
Lizenz claim|P275|parameter=link|references=ja|list=, }}
 }}

}}{{#if: teilweise |

deutschsprachig faculty|teilweise}} | ja | nein }}

}}{{#if: |

Sonstiges {{{Sonstiges}}}Vorlage:Infobox Software/Wartung/Sonstiges

}}{{#if: www.vim.org |

www.vim.org |
 {{#if: {{#invoke:Wikidata|claim|P856|notdeprecated=1}} | 
{{#invoke: WLink | formatURL | {{#invoke:Wikidata|claim|P856|parameter=link|notdeprecated=1}}}}
 }}

}}{{#if: |

Dateien [[c:Category:Created with {{{Dateien}}}|{{{Dateien}}}]]

}}

Vim (Vi IMproved) ist eine Weiterentwicklung des Texteditors vi. Das freie Open-Source-Programm wurde 1991 von Bram Moolenaar veröffentlicht. Seitdem wird der Editor aktiv weiterentwickelt. Wie vi zeichnet sich Vim durch seine verschiedenen Betriebs-Modi aus, während viele andere gebräuchliche Editoren nur einen kombinierten Modus für Eingabe und Befehle kennen, in dem Befehle über Tastenkombinationen und grafische Oberflächen ausgeführt werden.

Vi IMproved

Vim funktioniert wie der vi-Editor im Textmodus auf jedem Terminal. Die Bedienung erfolgt dann üblicherweise über die Tastatur, eine Maus wird zwar auf vielen Terminals unterstützt, ihre Verwendung ist aber limitiert. Das ist zum einen historisch bedingt durch die zu Ur-vi-Zeiten Mitte der 1970er Jahre üblichen Bildschirmterminals mit einer langsamen, seriellen Verbindung zum Hauptrechner, zum anderen schätzen erfahrene Benutzer die Effizienzvorteile der mächtigen Tastatursteuerung („vi is at your fingertips“). Aus der Limitierung damaliger Terminals resultiert sein modales Konzept. Vim ist nahezu vollständig abwärtskompatibel zu vi, hat jedoch eine Vielzahl an Weiterentwicklungen und eine moderne grafische Benutzerschnittstelle mit Menüs (GVim) sowie eine vereinfachte Version für Einsteiger (eVim).

Vim kann auf vielen Betriebssystemen genutzt werden und ist auf fast jedem GNU/Linux-Rechner zu finden. In der Regel wird beim Aufruf vi unter Linux Vim über eine Verknüpfung oder einen Alias aufgerufen. Welcher vi-Ableger gestartet wurde, lässt sich im Kommando-Modus über den Befehl :version überprüfen.

Geschichte

Historischer Exkurs zu ed/vi

Anfang der 1970er Jahre war ed von Ken Thompson der Unix-Standardeditor. Er arbeitete zeilenorientiert, d. h. die Anzeige des Textes erfolgte nicht wie heute gewohnt mehrzeilig, sondern sie musste über explizite Ausgabebefehle angewiesen werden (da die Ausgabe häufig nicht auf einem Bildschirm, sondern einem Fernschreiber erfolgte). Um mit den begrenzten Möglichkeiten einer Zeile arbeiten zu können, war es notwendig, einen Editier- und einen Kommandomodus zu verwenden (modaler Editor).

Die ed-Kommandos bestanden normalerweise aus einem Buchstaben, dem ein Zeilenbereich vorangestellt werden konnte. Als Bill Joy ab 1976 vi entwickelte, stellte dieser – als visueller Editor – einen wesentlichen Fortschritt gegenüber ed dar, da er Änderungen am editierten Text im Kontext umgebender Zeilen darstellte. Dabei erbte vi das modale Konzept, die Zeilenorientierung und die Kommandos. Diese ed-Kommandos finden sich in allen aktuellen vi-kompatiblen Editoren, wie auch in Vim, wieder.

Entwicklung des Vim

Bild 1: GVim-Split-Screen, oben Quelltext dieses Artikels, unten die Vim-Hilfe

Bram Moolenaar wollte Ende der 1980er Jahre gerne auf einem Amiga-Computer den Editor benutzen, welchen er von Unix her kannte und gewohnt war. Allerdings gab es damals keinen vi für den Amiga. So entwickelte er auf Basis des vi-Klones Stevie 1988 die Version 1.0 von Vim. Dieser hieß zu der Zeit noch vi IMitation, da das Hauptziel zunächst darin bestand, die Funktionalität von vi nachzubilden. Am 2. November 1991 wurde Vim mit Version 1.14 erstmals auf der sogenannten Fred Fish disk #591, einer Sammlung freier Software für den Amiga, veröffentlicht.[1] Die Version 1.22 wurde 1992 nach Unix und PC-kompatibles DOS (wie MS-DOS) portiert. Zu dieser Zeit wurde die Langform der Abkürzung in Vi IMproved geändert. Die Großbuchstaben sollen dabei das Kürzel Vim erklären: VIM ist Vi IMproved (improved, engl. für verbessert).

In den folgenden Jahren erfuhr Vim umfassende Verbesserungen. Ein Meilenstein war die Einführung der mehrfachen Editier-Fenster in der Version 3.0 (1994) (Bild 1). Mit vi konnte man zwar auch mehrere Dateien mit einem Aufruf editieren, aber man konnte immer nur eine Datei davon sehen und nicht mehrere gleichzeitig. Mit der Version 4.0, die 1996 erschien, war erstmals auch eine grafische Benutzeroberfläche verfügbar, an der Robert Webb großen Anteil hatte. Seit 1998 beherrscht Vim (in der Version 5.0) Syntax-Einfärbung (Bild 2a).

Als bisher letzter großer Schritt wurden 2001 mit der Version 6.0 Code-Faltung, Plug-ins, Unterstützung für Mehrsprachigkeit und vertikal aufgeteilte Fenster eingeführt (Bilder 2 bis 5). Die Version 6.4 (erschienen im Oktober 2005) behebt viele Fehler, fügt aber keine neuen Funktionen hinzu. Dies war Version 7.0 im Mai 2006 vorbehalten; sie verfügt über eine integrierte Rechtschreibprüfung und unterstützt Reiter (Tabs). Die Version 7.3 erschien im August 2010. Sie enthielt als größere Neuerungen (neben allen Patches, die sich ab Version 7.2 angesammelt haben) komplette Undo-Verzweigungen (mehrstufiges Undo beherrscht Vim seit langem), Blowfish-Kryptografie, Lua- und Python-3-Skriptfähigkeit sowie die Möglichkeit, Texte zu verbergen. Im August 2013 wurde die Version 7.4 veröffentlicht. Neu in dieser Version ist ein verbesserter RegEx-Parser. Die bislang letzte Version, Vim 8, erschien am 12. September 2016. Sie enthält unter anderem neue Features wie die Unterstützung von JSON.

Versionierung

Während zwischen kleinen Versionssprüngen (zum Beispiel von Version 7.1 auf Version 7.2) oft mehrere Monate vergehen, wird Vim dennoch kontinuierlich entwickelt. Die Vim-Benutzergemeinschaft steuert Fehlerbehebungen oder kleine Verbesserungen in Form von Patches bei, die dann mehrmals im Monat in den Vim-Code einfließen.[2]

Funktionalität

Überblick: Ausgewählte Eigenschaften und vi-Erweiterungen

Bild 2a: Vim mit einigen Features: Zeilennummerierung, Unicode, Syntaxhervorhebung und Text-Faltung
Bild 2b: Neue Vim-7-Funktionen: Rechtschreibprüfung und Wortvervollständigung mit Dropdown-Menü
  • integrierte Rechtschreibprüfung
  • Wortvervollständigung mit Dropdown-Menü
  • Anordnung mehrerer Dateien in Tabs
  • mehrfache Puffer- und Split-Screens, mehrere Editier-Fenster, auch vertikal
  • Text-Formatierungen und Visual Mode, zum Beispiel mit Blockoperationen
  • unbegrenztes Undo (Rückgängig machen) und Redo (Wiederherstellen) auch, wenn Vim zwischendurch beendet wurde
  • umfangreiche Online-Hilfe
  • Syntaxhervorhebung abhängig von der Programmiersprache für etwa 500 Sprachen und Dateitypen
  • eigene Skriptsprache zur Funktions-Erweiterung (analog zu Plug-ins)
  • Komplettierung von Kommandos, Wörtern oder Dateinamen
  • Editieren von Archiven (tar, gz/tgz, zip)
  • Auto-Kommandos (z. B.  Dekompression von gezippten Dateien vor dem Editieren)
  • Dateiformat-Erkennung und -Konvertierung
  • History-Mechanismus für Kommandos, Suchbegriffe usw.
  • Aufzeichnung und Ausführung von Makros
  • Speichern und Laden von Sitzungseinstellungen
  • optionale Integration von Perl, Python 2 und 3, Lua, Ruby und Tcl
  • Kryptografie mit dem Blowfish-Algorithmus
  • Unterstützung von bidirektionalem Text (u. a. Arabisch)
  • automatisches und manuelles Zusammenfalten von Textteilen zur besseren Übersicht
  • einfaches Ansprechen von Debuggern, Make-Programmen und Toolchains aus dem Editor heraus
  • Interprozesskommunikation und Job-Kontrolle über Sockets und Pipes („Channels“)
  • Terminal-Integration

Die Leistungsfähigkeit von Vim soll an einigen markanten vi-Verbesserungen dargestellt werden.

Vim-Hilfefunktion

Bild 3: GVim-Hilfe: Suche mittels ':helpgrep evim', unten gefundene Stellen, oben Hilfe-Text zur ausgewählten Fundstelle

Vim besitzt eine umfassende Dokumentation. Der Nutzer wird bei der Suche nach Lösungen zu seinem Problem durch verschiedene Funktionen unterstützt. Durch Syntaxhervorhebung und eine eigene Hilfe-Syntax werden Schlüsselbegriffe farbig hervorgehoben (Bild 1). Im Bild sind diese Begriffe grün dargestellt und werden in der Kommandozeilenversion in zwei senkrechte Striche eingeschlossen. Über Tastenkürzel kann zwischen diesen Schlüsselwörtern vorwärts und rückwärts navigiert werden, ähnlich wie in einem Webbrowser. Das funktioniert in der grafischen Oberfläche bzw. bei entsprechender Unterstützung im Terminal auch mit der Maus per Doppelklick oder rechter Maustaste. Es gibt noch weitere Funktionen, die dem Nutzer das Suchen erleichtern. Eine wichtige davon ist das :helpgrep-Kommando. Dabei kann der Nutzer nach einem Begriff in der gesamten Hilfe suchen, die Treffer in einem weiteren Fenster darstellen lassen und von diesem dann zu den entsprechenden Stellen in der Hilfe wechseln (Bild 3). Die Trefferliste (Bild 3 unten) kann mit der Suchfunktion von Vim nach weiteren Begriffen durchsucht werden. Ergänzt wird die Hilfe durch eine HTML-Version dieser Hilfe im Internet,[3] eine umfangreiche Sammlung der häufig gestellten Fragen (FAQ), Literatur auf Englisch und Deutsch und vieles mehr.

Unterstützung für Programmierer

Vim ist ein Editor, der ebenso wie vi für Programmierer geschrieben wurde. Daher gibt es die Möglichkeit, über Plugins edit-compile-fix (deutsch „Editieren-Übersetzen-Fehlerkorrektur“)-Funktionalitäten nachzurüsten. Ähnlich wie bei einer integrierten Entwicklungsumgebung wird der Quelltext editiert und dann mittels eines Compilers direkt aus Vim heraus übersetzt. Falls beim Kompilieren Fehler aufgetreten sind, werden diese in einem weiteren Fenster angezeigt. Von der Fehlermeldung kann direkt ins andere Fenster zur fehlerhaften Stelle im Quelltext gesprungen und dieser korrigiert werden. Danach kann ein weiterer Zyklus gestartet und es können gegebenenfalls weitere Fehler korrigiert werden. Der Programmierer wird dabei durch die Funktionen Syntaxhervorhebung und Textfaltung unterstützt.[4]

Dateivergleich

Bild 4: Datei-Vergleich mit GVim

Eine weitere häufige Aufgabenstellung besteht im Vergleichen von zwei Versionen einer Datei. Vim bietet hier eine Möglichkeit, die Unterschiede zweier Dateiversionen nebeneinander in zwei Fenstern darzustellen und die Differenzen farbig zu markieren (Bild 4), die typische Aufgabe eines Merge-Programms. Dabei werden geänderte und eingefügte Zeilen farbig hervorgehoben und Bereiche, die in beiden Versionen gleich sind, durch Text-Faltung ausgeblendet. Im Beispiel sind geänderte Stellen rot gekennzeichnet und eingefügte Zeilen blau bzw. fehlende Zeilen hellblau markiert. Gefaltete Zeilen sind hier grau unterlegt mit Angabe der Zeilenanzahl, die unverändert sind.

Vim-Skriptsprache

Bild 5: GVim mit Calendar-Skript (links) und dessen Quelltext (rechts)

Vim ist über die Skriptsprache Vimscript erweiter- und programmierbar. Damit lassen sich komplexe Vorgänge automatisieren, die für ein Makro zu kompliziert wären. Ein Beispiel für ein Vim-Skript ist die Vim-Start-Datei .vimrc unter Unix und GNU/Linux oder _vimrc unter Windows, DOS und OS/2, in der hauptsächlich Konfigurations-Einstellungen vorgenommen werden. Diese wird beim Start von Vim automatisch ausgeführt. In der Vim-Skriptsprache sind alle Kommandozeilen-Befehle verfügbar und über das Kommando ':normal' auch alle Normalmodus-Befehle. Es gibt mehrere Datentypen: Fließkommazahlen, ganze Zahlen, Zeichenketten, Listen und assoziative Arrays. Boolesche Werte werden über ganze Zahlen realisiert, wobei eine Null als falsch gewertet wird und alle anderen Zahlen als wahr. Es sind die wichtigsten Operatoren für Vergleiche, logische Verknüpfungen und Grundrechenarten vorhanden. Als Kontrollstrukturen stehen die Entscheidung 'if – then – elseif – else – endif' und die while-Schleife zur Verfügung. Der Nutzer kann eigene Funktionen definieren und über einhundert vordefinierte Funktionen verwenden, die im Wesentlichen den Unix-Systemaufrufen entsprechen. Die Skripte können mit einem Debug-Modus getestet werden. Wer plant, ein Vim-Skript zu schreiben, sollte vorher auf der Vim-Skript-Seite[5] nachsehen, ob es nicht schon ein Skript mit der entsprechenden Funktionalität gibt. Obwohl es dort viele Skripte zur Unterstützung von Programmieraufgaben gibt, lohnt sich auch für Nicht-Programmierer ein Blick auf diese Seite. Nicht zuletzt kann jeder Nutzer, der ein Problem von allgemeinem Interesse gut gelöst hat, sein Skript anderen zur Verfügung stellen. Als Beispiel für ein Vim-Skript soll das Kalender-Skript[6] dienen (Bild 5).

Einsteigerfreundliche Modifikationen

Im Laufe der Jahre wurden für Vim einige Modifikationen entwickelt, welche die Benutzung dieses Editors für ungeübte Benutzer einfacher machen sollen. Die bekanntesten sind der in Vim integrierte easy-Vim-Modus und das GUI GVim.

GVim

Mit GVim steht Vim unter den meisten aktuellen Betriebssystemen eine grafische Oberfläche zur Verfügung, die viele Befehle des Programms ähnlich den heute gängigen grafischen Texteditoren auch über Menüeinträge und eine Werkzeugleiste zugänglich macht. Über seine Konfigurationsdateien lässt sich GVim, ähnlich Vim, umfassend konfigurieren, auch das Einbinden von Vim-Skripten ist hier möglich. Im Gegensatz zum Vim lassen sich jedoch mehr Farben und Schriftarten für die Darstellung von Textdateien einstellen sowie fertige Farbschemata erstellen und nutzen.

eVim

eVim (kurz für easy Vim)[7] ist ein einfacher Modus, in dem Vim betrieben werden kann. Wird Vim in diesem Modus gestartet, so ist sofort der Einfüge-Modus aktiv; Befehle können nur über einen speziellen Befehlsmodus eingegeben werden. Auf diese Weise kann Vim fast wie ein nicht modaler Editor verwendet werden.

Cream

Mit der GVim-Erweiterung Cream ist es schließlich möglich, Vim vollständig auf eine Weise zu nutzen, die bisherigen Nutzern einfacherer Editoren (wie gedit oder dem Microsoft Notepad) vertraut ist. Es handelt sich um eine Reihe von Skripten zur weiteren Vereinfachung von GVim. So können praktisch alle wichtigen Kommandos mit der Maus über Menüs erreicht werden, und die Betriebs-Modi entfallen in der Defaultausführung gänzlich (können aber nach Belieben hinzugeschaltet werden). Cream ist weder in Vim noch in GVim integriert, sondern setzt auf beiden auf, ohne sie dabei zu ersetzen, d. h. auch die gleichzeitige Verwendung von Cream und GVim ist problemlos möglich.[8]

Modi

Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen. Die sechs Grundmodi sollen hier nur kurz erklärt werden. Zu den ersten drei Modi siehe auch vi: Arbeitsmodi. Es gibt noch fünf weitere Modi, auf die hier aber der Einfachheit halber nicht eingegangen werden soll. Diese sind Varianten der Grundmodi.[9]

Normalmodus

Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der {{#if:trim|Esc}}-Taste gelangt man immer in den Normalmodus zurück. Falls man sich nicht sicher ist, ob man sich bereits im Normalmodus befindet, kann man jederzeit die {{#if:trim|Esc}}-Taste drücken. War man bereits im Normalmodus, wird dies im Normalfall, je nach Vim-Konfiguration und Terminal-Einstellungen, mit einem Piepton signalisiert.

Einfügemodus

Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i (für engl. insert = einfügen). Es gibt eine Vielzahl anderer Befehle, um in diesen Modus zu gelangen.

Im Einfügemodus werden (fast) alle Tastatureingaben in den editierten Text übernommen, und nur ganz wenige Tasten und -kombinationen haben eine andere Wirkung. Die Wichtigste ist die {{#if:trim|Esc}}-Taste zur Beendigung des Einfügemodus. Anschließend sind die Normalmodus-Befehle wieder verfügbar.

Eine weniger verbreitete, alternative Sichtweise verzichtet darauf, das Einfügen von Text als eigenständigen Modus zu betrachten. Gemäß dieser Sichtweise existieren lediglich eine Reihe von Textänderungs-Befehlen, denen unmittelbar eine Eingabe folgt, welche mit {{#if:trim|Esc}} abzuschließen ist. Ein Vorteil dieser Sichtweise ist, dass niemals Zweifel aufkommen, ob momentan der Normalmodus gewählt ist, und auch das Potenzial der Befehlswiederholung erschließt sich in dieser Sichtweise eher.

Kommandozeilenmodus

Dieser Modus wird durch den einleitenden Doppelpunkt : erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos / (Textmuster vorwärts suchen), ? (Textmuster rückwärts suchen) und das Filter-Kommando !, mit dem die UNIX-Kommandos (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.

Visueller Modus

Dieser Modus ist eine Verbesserung von Vim und ähnelt dem Normalmodus. Mit der Maus oder bestimmten Tastenkürzeln wird ein Bereich zeilenweise, zeichenweise oder blockweise markiert und visuell hervorgehoben. Auf diesen Bereich können dann die Kommandos des Normal- sowie des Kommandozeilen-Modus angewandt werden. Die Arbeit mit diesem Modus ist einfacher als mit dem Normalmodus, da man genau sieht, welchen Bereich man gerade bearbeitet.

Auswahlmodus

Dieser Modus ähnelt dem insbesondere von Windows-Programmen gewohnten GUI-Verhalten, wo man einen Bereich mit Maus oder Shift+Pfeiltasten markiert. Gibt man nun ein druckbares Zeichen ein, so wird der selektierte Bereich gelöscht und gleichzeitig in den Einfüge-Modus gewechselt. Das heißt, der selektierte Bereich wird mit dem eingegebenen Text überschrieben. Einfacher ist der Auswahlmodus über die Tastenkombination Umschalttaste-Pfeiltasten erreichbar. Allerdings muss Vim dazu entsprechend konfiguriert werden. Beendet wird dieser Modus wie üblich mit der {{#if:trim|Esc}}-Taste. Auch dieser Modus ist eine Vim-Erweiterung.

Ex-Modus

Dieser Modus ähnelt dem Kommandozeilenmodus, mit dem Unterschied, dass nach Ausführung eines Kommandos nicht in den Normalmodus zurück gewechselt wird. Dieser Modus stammt aus dem UNIX-Zeileneditor ex (wie auch der traditionelle vi-Editor).

Verfügbarkeit

Vim ist unter vielen Betriebssystemen lauffähig. Vor allem für unixoide Systeme existieren Portierungen, beispielsweise für die UNIX- bzw. BSD-Derivate AIX IRIX, HP-UX, macOS und iOS und freie BSD-Distributionen wie FreeBSD sowie für Linux-basierende Systeme einschließlich Android.[10] Windows wurde seit 3.1 unterstützt, Vim 8 benötigt Windows XP und aufwärts. Auch für VMS, RISC OS, MorphOS, AmigaOS, Atari MiNT, klassisches Mac OS, Haiku und BeOS, NeXTStep, OS/2 sind (oder waren) Portierungen verfügbar.

Auszeichnungen

Vim war Gewinner des Readers’ Choice Awards[11] in der Kategorie Favorite Text Editor in den Jahren 2001 bis 2005 und erhielt 2000 den Slashdot Beanie Award als Best Open Source Text Editor sowie 1999 den Linuxworld Editors' Choice Award. Im Mai 2008 erhielt Bram Moolenaar für seine Arbeit an Vim den NLUUG Award, eine Auszeichnung der niederländischen Unix User Group.[12]

Lizenz

Vim steht unter einer GPL-kompatiblen Charityware-Lizenz (charity, engl.: Nächstenliebe). Das bedeutet, dass Vim frei verteilt werden darf, jedoch erbittet der Entwickler bei Gefallen eine Spende für Waisenkinder in Uganda durch das ICCF Holland.[13]

Entwickler und Community

Vim wird hauptsächlich von Bram Moolenaar und einer Community von vielen Freiwilligen entwickelt. Die Hilfeseite der aktuellen Version nennt über 60 Mitwirkende namentlich.[14] Es gibt eine große Anzahl ungenannter Helfer, die sich nicht nur um die Weiterentwicklung des Vim kümmern, sondern auch um die Portierung auf andere Betriebssysteme, um Programmtests und das Sammeln von Bugs, die Vervollständigung der Dokumentation und die Übersetzung der Hilfeseiten. Außerdem übernehmen sie die Beantwortung von Nutzeranfragen und die Einbindung des Vim in andere Projekte.

Andererseits entstand, wie auch im Fall von Emacs, über die Zeit eine ganze Reihe von Abspaltungen, häufig mit recht deutlichen Unterschieden in Motivation und Zielsetzung, Pflege und Weiterentwicklung wie auch dem Versuch, Kompatibilität zu Vim und seinen Erweiterungen zu wahren und sich gleichzeitig voneinander abzugrenzen. Größere Aufmerksamkeit in diesem Sinne erlangte Neovim, das sich in erster Linie als Weiterentwicklung und Refactoring-Projekt versteht und darum bemüht ist, den Editor durch Aussparen so verstandener Legacy-Teile, oder heute seltener benutzten Funktionen, zu verschlanken.[15]

Literatur

Weblinks

Vorlage:Wikibooks Vorlage:Commonscat

Einzelnachweise

  1. Liste der Vim-Patches für Version 7.4
  2. Vim documentation
  3. ':help quickfix' in der Vim-Online-Dokumentation zu Version 7.0
  4. Vim Scripts auf www.vim.org
  5. Kalender-Skript für Vim
  6. Manpage zu eVim
  7. Cream auf SourceForge
  8. ':help vim-modes' in der Vim-Online-Dokumentation zu Version 7.0
  9. Paul Bailey: Termux turns Android into a Linux development environment, opensource.com, abgerufen am 28. August 2019.
  10. Linux Journal vom Dezember 2004
  11. Bericht auf der NLUUG-Website (auf Niederländisch)
  12. Internetpräsenz des ICCF Holland
  13. :help credits in der Dokumentation zu Version 8.1
  14. About Neovim, neovim.io/charter/, abgerufen am 30. August 2018.