{"id":61,"date":"2013-03-22T10:57:15","date_gmt":"2013-03-22T09:57:15","guid":{"rendered":"http:\/\/diesesinternet.de\/blog\/?p=61"},"modified":"2013-06-02T13:42:18","modified_gmt":"2013-06-02T12:42:18","slug":"der-vi-texteditor","status":"publish","type":"post","link":"https:\/\/www.diesesinternet.de\/blog\/der-vi-texteditor\/","title":{"rendered":"Der VI Texteditor"},"content":{"rendered":"<p>DER Texteditor schlechthin \ud83d\ude42<\/p>\n<p>Um auf einem Unix-System, mal eben eine Textdatei zu bearbeiten gibt es nichts besseres als VI. Leider gibt sich dieser m\u00e4chtige Editor zu Anfang etwas spr\u00f6de; aber das legt sich schnell. Glaubt&#8217;s mir.<br \/>\n<!--more--><\/p>\n<h2>Inhaltsverzeichnis<\/h2>\n<ul>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#1.\">Start einer vi-Sitzung<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#2.\">Text sichern und vi verlassen<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#3.\">Eingeben von Text<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#4.\">Rollen und Ausrichten des Bildschirminhalts<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#5.\">Bewegen des Cursors in einem File<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#6.\">Text l\u00f6schen<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#7.\">\u00c4ndern von Text<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#8.\">\u00c4nderungen zur\u00fccksetzen<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#9.\">Text kopieren oder verschieben<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#10.\">Globales Suchen und Ersetzen von Text<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#11.\">Suchen im Text<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#12.\">Shellkommandos<\/a><\/li>\n<li><a href=\"http:\/\/www-user.tu-chemnitz.de\/%7Echo\/vi.html#13.\">Vi-Optionen<\/a><\/li>\n<\/ul>\n<hr \/>\n<ul>\n<li><a name=\"1.\"><\/a>Start einer vi-Sitzung<\/li>\n<\/ul>\n<p><b>vi <var>file<\/var> Editiere <var>file<\/var><br \/>\nvi -r <var>file<\/var> Editiere die letzte gerettete Version<br \/>\nvon <var>file<\/var> nach Systemabsturz<br \/>\nvi +<var>n<\/var> <var>file<\/var> Editiere <var>file<\/var> mit Cursorpositionierung<br \/>\nauf Zeile <var>n<\/var><br \/>\nvi + <var>file<\/var> Editiere <var>file<\/var> mit Cursorpositionierung<br \/>\nauf letzte Zeile<br \/>\nvi <var>file1<\/var> &#8230; <var>filen<\/var> Editiere <var>file1<\/var> bis <var>filen<\/var><br \/>\nvi +\/<var>str file<\/var> Editiere <var>file<\/var> mit Cursorpositionierung<br \/>\nauf Zeile, die <var>str<\/var> enth\u00e4lt<\/b><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"2.\"><\/a>Text sichern und vi verlassen <\/b><\/li>\n<\/ul>\n<p><b>ZZ oder :wq aktuelles File sichern und vi verlassen<br \/>\n:q! vi verlassen, ohne das aktuelle File<br \/>\nzu sichern<br \/>\n:w aktuelles File sichern<br \/>\n:w <var>file<\/var> aktuelles File in <var>file<\/var> sichern<br \/>\n:w! <var>file<\/var> Inhalt von <var>file<\/var> mit dem aktuellen<br \/>\nFile \u00fcberschreiben<br \/>\n:<var>m,n<\/var>w <var>file<\/var> Zeile <var>m<\/var> bis Zeile <var>n<\/var> des aktuellen<br \/>\nFiles in <var>file<\/var> sichern<\/b><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"3.\"><\/a>Eingeben von Text <\/b><\/li>\n<\/ul>\n<p><b>a Text nach dem Cursor einf\u00fcgen<br \/>\nA Text am Ende der Zeile einf\u00fcgen<br \/>\ni Text vor dem Cursor einf\u00fcgen<br \/>\nI Text am Anfang der Zeile einf\u00fcgen<br \/>\no unter dem Cursor Leerzeile f\u00fcr<br \/>\nTexteingabe er\u00f6ffnen<br \/>\nO \u00fcber dem Cursor Leerzeile f\u00fcr<br \/>\nTexteingabe er\u00f6ffnen<\/b><\/p>\n<p>:r <var>file<\/var> <var>file<\/var> lesen und nach der aktuellen<br \/>\nZeile einf\u00fcgen<br \/>\n:<var>n<\/var>r <var>file<\/var> <var>file<\/var> lesen und nach der <var>n<\/var>-ten<br \/>\nZeile einf\u00fcgen<\/p>\n<p>&nbsp;<\/p>\n<h3><b>Der Wechsel vom vi-Eingabemodus zur\u00fcck in den Kommandomodus<br \/>\nerfolgt mit der Taste &lt;ESC&gt;<\/b><\/h3>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"4.\"><\/a>Rollen und Ausrichten des Bildschirminhaltes<\/b><\/li>\n<\/ul>\n<p><b>&lt;CTRL&gt;-f eine Seite vorw\u00e4rts rollen<br \/>\n&lt;CTRL&gt;-b eine Seite r\u00fcckw\u00e4rts rollen<br \/>\n&lt;CTRL&gt;-d eine halbe Seite vorw\u00e4rts rollen<br \/>\n&lt;CTRL&gt;-u eine halbe Seite r\u00fcckw\u00e4rts rollen<\/b><\/p>\n<p>z &lt;RET&gt; aktuelle Zeile wird oberste Zeile<br \/>\ndes Bildschirms<br \/>\nz. aktuelle Zeile wird zur mittlere Zeile<br \/>\nz aktuelle Zeile wird zur untersten Zeile<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"5.\"><\/a>Bewegen des Cursors in einem File <\/b><\/li>\n<\/ul>\n<p><b>h oder &lt;&#8211; Cursor nach links bewegen<br \/>\nl oder &#8211;&gt; Cursor nach rechts bewegen<br \/>\nj Cursor nach unten bewegen<br \/>\nk Cursor nach oben bewegen<br \/>\n$ Cursor zum Ende der aktuellen Zeile bewegen<br \/>\n0 (Null) Cursor zum Anfang der aktuellen Zeile bewegen<br \/>\n<b>^<\/b> Cursor zum ersten sichtbaren Zeichen der<br \/>\naktuellen Zeile bewegen<br \/>\nt<var>char<\/var> Cursor vor erstes Zeichen <var>char<\/var> bewegen<br \/>\n<var>n<\/var>t<var>char<\/var> Cursor vor <var>n<\/var>-tes Zeichen <var>char<\/var> bewegen<\/b><\/p>\n<p>w Cursor zum Anfang des n\u00e4chsten Wortes bewegen<br \/>\nW Cursor zum Anfang des n\u00e4chsten Wortes bewegen<br \/>\n(ohne Ber\u00fccksichtigung von Sonderzeichen)<br \/>\nb Cursor zum Anfang des vorhergehenden Wortes<br \/>\nbewegen<br \/>\nB Cursor zum Anfang des vorhergehenden Wortes<br \/>\nbewegen (ohne Ber\u00fccksichtigung von<br \/>\nSonderzeichen)<br \/>\ne Cursor zum Ende des n\u00e4chsten Wortes bewegen<br \/>\nE Cursor zum Ende des n\u00e4chsten Wortes bewegen<br \/>\n(ohne Ber\u00fccksichtigung von Sonderzeichen)<\/p>\n<p>H Cursor auf oberste Zeile des Bildschirms<br \/>\nM Cursor auf mittlere Zeile des Bildschirms<br \/>\nL Cursor auf unterste Zeile des Bildschirms<br \/>\n1G Cursor auf 1. Zeile im File bewegen<br \/>\n<var>n<\/var>G Cursor auf <var>n<\/var>-te Zeile im File bewegen<br \/>\nG Cursor auf letzte Zeile im File bewegen<br \/>\n<var>n<\/var>+ Cursor <var>n<\/var> Zeilen vorw\u00e4rts bewegen<br \/>\n<var>n<\/var>&#8211; Cursor <var>n<\/var> Zeilen r\u00fcckw\u00e4rts bewegen<\/p>\n<p>( Cursor zum Anfang des Satzes bewegen<br \/>\n) Cursor zum Anfang des n\u00e4chsten Satzes bewegen<br \/>\n{ Cursor zum Anfang des Absatzes bewegen<br \/>\n} Cursor zum Anfang des n\u00e4chsten Absatzes<br \/>\nbewegen<br \/>\n% (auf {}[]()) Cursor auf zugeh\u00f6rende Klammer bewegen<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"6.\"><\/a>Text l\u00f6schen <\/b><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><b>Im vi-Kommandomodus:<\/b><\/h3>\n<p><b>x durch Cursor markiertes Zeichen l\u00f6schen<br \/>\n<var>n<\/var>x <var>n<\/var> Zeichen ab Cursor l\u00f6schen<br \/>\ndd aktuelle Zeile l\u00f6schen<br \/>\n<var>n<\/var>dd die n\u00e4chsten <var>n<\/var> Zeilen l\u00f6schen<br \/>\n(einschl. der aktuellen)<br \/>\ndw aktuelles Wort l\u00f6schen (vom Cursor bis<br \/>\nWortende)<br \/>\ndW aktuelles Wort einschl. Sonderzeichen l\u00f6schen<br \/>\n<var>n<\/var>dw <var>n<\/var> W\u00f6rter ab markiertem Wort l\u00f6schen<br \/>\ndb vorhergehendes Wort l\u00f6schen<br \/>\ndB vorhergehendes Wort einschl. Sonderzeichen<br \/>\nl\u00f6schen<br \/>\n<var>n<\/var>db <var>n<\/var> W\u00f6rter vor dem Cursor l\u00f6schen<br \/>\nd$ oder D aktuelle Zeile vom Cursor bis Zeilenende<br \/>\nl\u00f6schen<br \/>\nd0 (Null) aktuelle Zeile vom Cursor bis Zeilenanfang<br \/>\nl\u00f6schen<br \/>\nd<var>cursor_cmd<\/var> Text vom Cursor bis zu der durch <var>cursor_cmd<\/var><br \/>\nbestimmten Stelle l\u00f6schen<\/b><\/p>\n<p>:<var>m,n<\/var>d Zeilen <var>m<\/var> bis <var>n<\/var> l\u00f6schen<\/p>\n<p>&nbsp;<\/p>\n<h3><b>Im vi-Eingabemodus:<\/b><\/h3>\n<p><b>&lt;CTRL&gt;-h oder Backspace im Eingabemodus vorhergehendes<br \/>\nZeichen l\u00f6schen<br \/>\n&lt;CTRL&gt;-w im Eingabemodus vorhergehendes Wort l\u00f6schen<br \/>\n&lt;CTRL&gt;-x im Eingabemodus zuletzt eingegebenen Text<br \/>\nvollst\u00e4ndig l\u00f6schen<\/b><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"7.\"><\/a>\u00c4ndern von Text <\/b><\/li>\n<\/ul>\n<p><b>r<var>char<\/var> aktuelles Zeichen durch <var>char<\/var> ersetzen<br \/>\nR<var>text<\/var> aktuelle(s) Zeichen durch <var>text<\/var> ersetzen<br \/>\ns<var>text<\/var> aktuelles Zeichen durch <var>text<\/var> ersetzen<br \/>\nS<var>text<\/var> oder cc<var>text<\/var> aktuelle Zeile durch <var>text<\/var> ersetzen<br \/>\ncw<var>text<\/var> aktuelles Wort durch <var>text<\/var> ersetzen<br \/>\n<var>n<\/var>cw<var>text<\/var> <var>n<\/var> W\u00f6rter ab Cursor durch <var>text<\/var> ersetzen<br \/>\nC<var>text<\/var> aktuelle Zeile von Cursor bis Zeilenende<br \/>\ndurch <var>text<\/var> ersetzen<br \/>\nc<var>cursor_cmd text<\/var> Text von Cursor bis <var>cursor_cmd<\/var> durch<br \/>\n<var>text<\/var> ersetzen<br \/>\n. letztes Kommando wiederholen<\/b><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"8.\"><\/a>\u00c4nderungen zur\u00fccksetzen <\/b><\/li>\n<\/ul>\n<p><b>u zuletzt ausgef\u00fchrten Befehl r\u00fcckg\u00e4ngig machen<br \/>\nU Zustand der aktuellen Zeile vor der \u00c4nderung<br \/>\nherstellen<br \/>\n:q! vi-Sitzung ohne Sicherung der \u00c4nderung<br \/>\nverlassen<\/b><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"9.\"><\/a>Text kopieren oder verschieben <\/b><\/li>\n<\/ul>\n<p><b>Y oder yy aktuelle Zeile zwischenspeichern<br \/>\n<var>n<\/var>Y oder <var>n<\/var>yy <var>n<\/var> Zeilen ab Cursor zwischenspeichern<br \/>\ny<var>cursor_cmd<\/var> Text von Cursor bis <var>cursor_cmd<\/var><br \/>\nzwischenspeichern<\/b><\/p>\n<p>dd aktuelle Zeile l\u00f6schen<br \/>\n<var>n<\/var>dd <var>n<\/var> Zeilen ab Cursor l\u00f6schen<br \/>\nd<var>cursor_cmd<\/var> Text von Cursor bis <var>cursor_cmd<\/var> l\u00f6schen<\/p>\n<p>p gel\u00f6schten oder zwischengespeicherten Text<br \/>\nhinter (oder unter) dem Cursor einf\u00fcgen<br \/>\nP gel\u00f6schten oder zwischengespeicherten Text<br \/>\nvor (oder \u00fcber) dem Cursor einf\u00fcgen<\/p>\n<p>xp zwei Zeichen vertauschen<\/p>\n<p>J zwei Zeilen zusammenf\u00fcgen<br \/>\n<var>n<\/var>J <var>n<\/var> Zeilen zusammenf\u00fcgen<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"10.\"><\/a>Globales Suchen und Ersetzen von Text <\/b><\/li>\n<\/ul>\n<p><b>:<var>m,n<\/var>s\/<var>str1<\/var>\/<var>str2<\/var>\/ von Zeile <var>m<\/var> bis Zeile <var>n<\/var> wird <var>str1<\/var><br \/>\ndurch <var>str2<\/var> ersetzt<br \/>\n:<var>m,n<\/var>s\/<var>str1<\/var>\/<var>str2<\/var>\/g von Zeile <var>m<\/var> bis Zeile <var>n<\/var> werden alle<br \/>\n<var>str1<\/var> durch <var>str2<\/var> ersetzt<br \/>\n&amp; das letzte :s-Kommando wird wiederholt<\/b><\/p>\n<p>:g\/<var>str<\/var>\/<var>cmd<\/var> <var>cmd<\/var> wird f\u00fcr alle Zeilen ausgef\u00fchrt, die<br \/>\n<var>str<\/var> enthalten<br \/>\n:v\/<var>str<\/var>\/<var>cmd<\/var> <var>cmd<\/var> wird f\u00fcr alle Zeilen ausgef\u00fchrt, die<br \/>\n<var>str<\/var> nicht enthalten<br \/>\n<b>~<\/b> aktueller Buchstabe wird in Gro\u00df- bzw.<br \/>\nKleinbuchstabe umgewandelt<br \/>\n<var>n<\/var><b>~<\/b> <var>n<\/var> Buchstaben ab Cursor in Gro\u00df- bzw.<br \/>\nKleinbuchstaben umwandeln<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"11.\"><\/a>Suchen im Text <\/b><\/li>\n<\/ul>\n<p><b>f<var>char<\/var> vorw\u00e4rts suchen von <var>char<\/var> in der aktuellen<br \/>\nZeile<br \/>\nF<var>char<\/var> r\u00fcckw\u00e4rts suchen von <var>char<\/var> in der aktuellen<br \/>\nZeile<br \/>\n\/<var>str<\/var>&lt;RET&gt; vorw\u00e4rts suchen von <var>str<\/var> ab der aktuellen<br \/>\nZeile<br \/>\n?<var>str<\/var>&lt;RET&gt; r\u00fcckw\u00e4rts suchen von <var>str<\/var> ab der aktuellen<br \/>\nZeile<br \/>\nn n\u00e4chstes Muster (vorw\u00e4rts) suchen<\/b><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"12.\"><\/a>Shellkommandos <\/b><\/li>\n<\/ul>\n<p><b>:<b>!<\/b><var>cmd<\/var> Kommando <var>cmd<\/var> wird der Shell zur Ausf\u00fchrung<br \/>\n\u00fcbergeben<br \/>\n:r <b>!<\/b><var>cmd<\/var> Kommando <var>cmd<\/var> wird ausgef\u00fchrt und Ergebnis<br \/>\nhinter der aktuellen Zeile eingef\u00fcgt<\/b><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><b><a name=\"13.\"><\/a>Vi-Optionen <\/b><\/li>\n<\/ul>\n<p><b>Durch das Belegen von vi-Optionen (Kommando :set) mit<br \/>\neinem Wert oder das Setzen von Optionen kann die Arbeitsweise<br \/>\ndes Editors beeinflu\u00dft werden.<br \/>\nDie Kommandos set k\u00f6nnen in ein File mit dem Namen $HOME\/.exrc<br \/>\neingetragen werden, welches bei jedem vi-Editoraufruf<br \/>\nabgearbeitet wird.<\/b><\/p>\n<p>:set all Anzeige Belegung aller Optionen<\/p>\n<p>Hier eine kleine Auswahl:<\/p>\n<p>:set number Zeilennummern anzeigen<br \/>\n:set nonumber Zeilennummern nicht anzeigen<br \/>\n:set ignorecase beim Suchen soll nicht zwischen Gro\u00df- und<br \/>\nKleinbuchstaben unterschieden werden<br \/>\n:set noignorecase beim Suchen soll zwischen Gro\u00df- und<br \/>\nKleinbuchstaben unterschieden werden<br \/>\n:set showmatch bei Eingabe einer schlie\u00dfenden Klammer wird<br \/>\ndie dazugeh\u00f6rige \u00f6ffnende Klammer angezeigt<br \/>\n:set noshowmatch keine Klammernpr\u00fcfung<br \/>\n:set autoindent automatische Einr\u00fcckung<br \/>\n:set noautoindent keine automatische Einr\u00fcckung<br \/>\n:set wrapmargin=<var>n<\/var> ab <var>n<\/var> Zeichen vor Zeilenende wird<br \/>\nautomatisch an einer Wortgrenze getrennt<\/p>\n<p>und eine neue Zeile begonnen<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DER Texteditor schlechthin \ud83d\ude42 Um auf einem Unix-System, mal eben eine Textdatei zu bearbeiten gibt es nichts besseres als VI. Leider gibt sich dieser m\u00e4chtige Editor zu Anfang etwas spr\u00f6de; aber das legt sich schnell. Glaubt&#8217;s mir.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[35],"tags":[13,14],"_links":{"self":[{"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/posts\/61"}],"collection":[{"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/comments?post=61"}],"version-history":[{"count":6,"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/posts\/61\/revisions"}],"predecessor-version":[{"id":274,"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/posts\/61\/revisions\/274"}],"wp:attachment":[{"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/media?parent=61"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/categories?post=61"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diesesinternet.de\/blog\/wp-json\/wp\/v2\/tags?post=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}