Vim: Unterschied zwischen den Versionen

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


== Anhang ==
== Anhang ==

Version vom 15. Oktober 2024, 09:31 Uhr

vim - Editor für die Kommandozeile

Beschreibung

Installation

sudo apt install vim

Syntax

vim [Datei]

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

Optionen

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

Parameter

Umgebungsvariablen

Exit-Status

Anhang

Siehe auch


Dokumentation

Man-Pages
Info-Pages

Links

Projekt
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