Formatierung einer Datei [DOS/UNIX/ …] ( CR+LF/LF/ …)
:set ff ?
:set ff=dos
Codierung einer Datei (latin1 [=iso-8859-1]/iso-8859-n/UTF-8/…)
:set encoding
:set encoding=utf-8
Neu einlesen einer extern geänderten Datei
:e!
Für die Benutzung des Editors ist kein X-Windows nötig, denn vi läuft auf nahezu jedem Terminal. Daher ist es wichtig, den richtigen Terminaltyp beim login anzugeben. Loggt man sich beispielsweise über das Netz per ssh auf einen Zentralrechner ein, sollte man als Terminaltyp vt100 setzen mit set term = vt100 . Als Default ist meist xterm gesetzt, anzuzeigen mit dem Kommando echo $term . Mit der Datei .exrc im Homedirectory des Benutzers kann eine eigene Tastaturbelegung für den vi geladen werden.
Aufruf:
#vi filename
Damit wird die Datei in den Editorpuffer geladen und die ersten Zeilen werden, soweit vorhanden, auf dem Bildschirm ausgegeben, sonst wird die Datei neu angelegt:
Der vi kennt zwei Modi, den Kommandomodus und den Insertmodus. Nach Aufruf befindet man sich im Kommandomodus. In den Insertmodus gelangt man durch Eingabe von <i>, zurück in den Kommandomodus mit <ESC>.
Die wichtigsten Kommandos:
:wq Datei sichern und Editor verlassen ZZ Datei sichern und Editor verlassen (alternativ) :q! Editor verlassen ohne Abspeichern :w file Datei nach file schreiben :w! file Datei nach file schreiben, falls vorhanden überschreiben :z1,z2 w file Zeilen z1 bis z2 nach file schreiben :r file file in Editorpuffer einlesen und an aktueller Cursorposition einfügen :n next, die nächste Datei aus der Aufrufliste wird in den Editorpuffer geladen i text <ESC> insert, Text vor Cursorposition einfügen I text <ESC> Text am Zeilenanfanf einfügen a text <ESC> append, Text hinter Cursorposition einfügen A text <ESC> Text am Zeilenende einfügen o text <ESC> open, neue Zeile hinter aktueller Zeile einfügen O text <ESC> neue Zeile vor aktueller Zeile einfügen R text <ESC> replace, nachfolgenden Text überschreiben C text <ESC> change, nachfolgenden Text bis Zeilenende ersetzen ctrl v <s> im Insertmodus einfügen von Steuerzeichen <s> \ Wirkung des nachfolgenden Sonderzeichens wird aufgehoben r c replace, ersetze aktuelles Zeichen durch c x lösche aktuelles Zeichen cw change word, der Rest des aktuellen Wortes wird überschrieben D lösche Rest der Zeile dd lösche aktuelle Zeile dw lösche aktuelles Wort z1,z2 d lösche den Bereich Zeile z1 bis z2 ctrl g liefert aktuelle Zeilennummer und Länge der Datei u undo, mache letzten Befehl rückgängig [n]Y yank, es werden n Zeilen ab der aktuellen in den Puffer geschrieben. Wird n nicht angegeben, wird die akt. Zeile gepuffert. yw Wort wird ab Cursorposition gepuffert p paste, schreibt den Pufferinhalt hinter die aktuelle Cursorposition J join, die aktuelle und die nachfolgende Zeile werden zu einer verknüpft :s/alt/neu substitute,in aktueller Zeile erstes alt durch neu ersetzen :s/alt/neu/g in aktueller Zeile alle alt durch neu ersetzen :%s/alt/neu/g in der ganzen Datei alt durch neu ersetzen :%s/alt/neu/c in der ganzen Datei alt durch neu nach Rückfrage ersetzen,bei Eingabe von y<CR> wird ersetzt, sonst nicht /suchstring sucht ab aktueller Cursorposition nach suchstring ?suchstring sucht analog rückwärts n next, wiederhole das letzte Suchkommando
Die Cursortasten sollten funktionieren, ansonsten müssen entsprechende Änderungen in der Datei .exrc vorgenommen werden.
ctrl F eine Seite vorwärts blättern ctrl B eine Seite rückwärts blättern ^ Anfang der aktuellen Zeile $ Ende der aktuellen Zeile :(n) Anfang von Zeile n ctrl N nächste Zeile, gleiche Spalte :!kommando Ausführen eines Shell-Kommandos innerhalb des vi's
:set all listet sämtliche momentanen Einstellungen :set nu automatische Zeilennumerierung einstellen :set nonu Zeilennumerierung ausstellen
Falls ausversehen Control-S gedrückt wird (z.B. weil versucht wurde die Datei über die Emacs Tastenkombination C-x C-s zu Speichern…), dann wird dieses vom Terminal als Stop interpretiert. Es werden dann solange keine Tastendrücke verarbeitet, bis durch Drücken von Control-Q dieser Stop wieder aufgehoben wird. Alle in der Zwischenzeit eingegebenen Tastendrücke werden dann ausgewertet.