" Merkzettel fuer Vim " " /Kommando-Mode/ " Kommandos mit denen man in den "insert-mode" kommt. a = Anhaengen hinter dem aktuellen Zeichen A = Anhaengen hinter der aktuellen Zeile i = Einfuegen vor dem aktuellen Zeichen I = Einfuegen am Anfang der Zeile (Grosses 'i') J = Verbinden einer Zeile mit ihrem Nachfolger o = Einfuegen einer neuen Zeile unterhalb der aktuellen Zeile O = Einfuegen einer neuen Zeile oberhalb der aktuellen Zeile R = Umschalten in den "insert-mode", indem alle nachfolgenden Zeichen ueberschrieben werden (Replace). " Abspeichern und Beenden ("command-mode") ZZ = Verlassen und den Bufferinhalt auf die Platte zurueckschreiben :q! = Verlassen ohne die Aenderungen zu speichern :wq = Speichern und beenden (Siehe: 'ZZ') :x = Speichern und beenden :w = bspeichern des Editor-Puffers in die aktuelle Datei :w dateiname = Abspeichern des Editor-Puffers in die Datei "dateiname" :w! = Ueberschreiben einer Read-Only-Datei :bereich w datei = Abspeichern eines Zeilenbereichs, wobei der Dateiname angegeben werdem *muss* :e datei = Editieren einer anderen Datei, sofern der aktuelle Puffer nicht modifiziert wurde " Bewegen im Text ("command-mode") Ctrl-f = Bildschirm vorblaettern (ganze Seite) Ctrl-b = Bildschirm zurueckblattern (ganze Seite) Ctrl-u = Bildschirm vorblaettern (1/2 Seite) Ctrl-d = Bildschrim zurueckblattern (1/2 Seite) h = Zeichen nach Links l = Zeichen nach Rechts (Kleines 'L') j = Zeichen nach unten + = Zeichen nach unten k = Zeichen nach oben - = Zeichen nach oben 0 = Zeilenanfang ('Null') $ = Zeilenende ^ = Cursor auf das erste sichtbare Zeichen in der Zeile setzen (also ohne Leerzeichen) w = Ein Teilwort weiter B = Ein Wort zurueck E = Ein Wort weiter W = Auch das naechste Wort, wobei hier die Satzzeichen (Punkt, Komma, ..) nicht als Worttrenner gelten. ) = Auf den naechsten Satzanfang springe ( = Auf den Anfang des vorhergehenden Satzes springen. { = Gehe zum Anfang des Paragraphen } = Gehe zum Ende des Paragraphen [[ = Gehe zum Anfang der Datei ]] = Gehe zum Ende der Datei 23| = Zur Spalte "23" springen (ohne Angabe einer Zahl wird auf die erste Spalte gesprungen) H = Setz den Cursor auf das erste sichtbare Zeichen der ersten Zeile auf dem Bildschirm. '4H' bewegt den Cursor auf die dritte Zeile. M = Cursor auf die mittlere Zeile setzen. L = Auf die letzte Zeile des Bildschrims setzen. '4L' wuerde den Cursor auf die viertletzte Zeile setzen. G = Innerhalb der Datei wird der Cursor auf die letzte Zeile positioniert. Durch die Eingabe einer Zahl springt man direkt auf die Zeile (i. e.: '4G' setzt den Cursor auf die vierte Zeile). zt = aktuelle Zeile an den oberen Fensterrand verschieben zz = atuelle Zeile in die Mitte des Fensters verschieben zb = aktuelle Zeile an den unteren Fensterrand verschieben % = sucht fuer bestimmte Text-Elemente, die unter oder hinter dem Cursor stehen, den bzw. die zugehoerigen "Partner". Folgendes wird als "Text-Element" akzeptiert. - runde, eckige und geschweifte Klammern: ([{}]) - Begrenzer von Kommentaren der Programmiersprache C: /* und */ - folgende Direktiven des C-Praeprozessors: #if, #ifdef, #else, #elif, #endif `" = zur letzten Cursorposition gehen `. = zur letzten Aenderung gehen f = Auf das Suchzeichen springen (Gilt nur innerhalb einer Zeile). Mit 'fa' springt man zum naechsten 'a' in einer Zeile. F = Hier wird nicht wie bei 'f' von links nach rechts, sondern von rechts nach links gesucht. t = Der Cursor springt auf das Zeichen, das vor dem Suchzeichen steht. T = Siehe 't' nur hier ist die Richtung umgekehrt (also von rechts nach links) +f = Bildschirmseite vorwaerts blaettern. +b = Bildschrimseite rueckwaerts blaettern. +d = Bildschrimseite nach unten. +u = Bildschrimseite nach oben. " Korrigieren im "Kommando-Mode" " Man kann diese Kommandos auch mit einem Wiederholungsfaktor versehen. " 42dd == 42 Zeilen loeschen. " Mit 'u' kann man die letzte Loeschung / Aenderung wieder rueckgaengig " machen. " ** Aber nur die letzte Aenderung! ** r = Ersetzt das Zeichen auf dem der Cursor steht gegen . df = Loescht bis zum ersten Auftreten des Zeichens '' in der aktuellen Zeile. dG = Loescht alles bis zur letzten Zeile. Die aktuelle Zeile wird mitgeloescht. dG = Loescht von der aktuellen Zeile nach oben bis zur Zeile '' dgg = Loescht alles von der aktuellen Zeile bis zur ersten Zeile. dw = Loescht das aktuelle Wort. d$ = Loescht alles bis zum Zeilenende D = Siehe 'd$'. d0 = Loescht alles bis zum Zeilenanfang. dd = Loescht die aktuelle Zeile. cc = Loescht die aktuelle Zeile und wechselt in den "insert-mode" C = Siehe 'cc'. d) = Loescht von der aktuellen Position bis zum Satzende. d' = Loescht alle Zeichen von der aktuellen Position bis zur Zeile mit der Marke '' (i. e.: d'a) " Suchen /regex = Sucht von der aktuellen Zeile abwaerts ?regex = Sucht von der aktuellen Zeile aufwaerts * = Vorwaertssuche des Wortes unter dem Cursor # = Rueckwaertssuche des Wortes unter dem Cursor n = Wiederholung der letzten Suche N = Wiederholung der letzten Suche in umgekehrter Richtung fjehova = Sucht nach "jehova" in der aktuellen Zeile vorwaerts Fjehova = Sucht nach "jehova" in der aktuellen Zeile rueckwaerts " Kopieren, Markieren, Pasten, .. yy = Kopieren mehrerer Zeilen in das unbenannte Register Y (23yy == 23 Zeilen) y$ = Kopieren des Zeilenrestes in das unbenannte Register p = Einfuegen des Inhalts des unbenannten Registers hinter der aktuellen Stelle P = Einfuegen des Inhalts des unbenannten Registers vor der aktuellen Stelle :bereich co to = Kopieren eines Zeilenbereichs. Der durch "bereich" beschriebene Zeilenbereich wird hinter der durch "to spezifizierten Zeile in den Text eingefuegt. xp = Vertauschen eines Zeichens mit seinem Nachfolger ddp = Vertauschen einer Zeile mit ihrem Nachfolger gf = Oeffne Datei, dessen Name unter dem Cursor steht (insbesondere fuer Include-Dateien interessant). 'path' bestimmt in welchen Verzeichnissen gesucht wird. " Anderes Zeugs ~ (Tilde) = Umwandlung von Klein- in Grossbuchstaben und umgekehrt . (Punkt) = Wiederholung des letzten Einfuege- bzw. Loesch-Kommandos :ar (:files) = Anzeige der Dateiliste :n = Uebergang zur naechsten Datei der Liste :N = Uebergang zur vorherigen Datei der Liste :rew = Uebergang zur ersten Datei der Liste :la = Uebergang zur letzten Datei der Liste :r = Einlesen einer Datei hinter die aktuelle Zeile :r = Einlesen einer Datei vor der unter "" angegebenen Zeile q register = Beginn der Aufzeichnung einer Tastenfolge in einem Register (qa (Aufzeichnung in Register a starten)) q = Ende der Aufzeichnung einer Tastenfolge @ register = Ausfuehren des Inhalts eines Registers > = Einzug groesser < = Einzug kleiner --> Kommando-Modus -------------------------------------------------------------------------- i --> Schreib-Modus: links einfuegen (#i) I --> Schreib-Modus: springt zum sichtb. Zeilenanfang, dann wie i a --> Schreib-Modus: rechts anhaengen (#a) A --> Schreib-Modus: springt zum Zeilenende, dann wie a (#A) r --> Schreib-Modus: ein Zeichen ueberschreiben 3r --> Schreib-Modus: eingegebenes Zeichen 3-mal R --> Schreib-Modus: beliebig viele Zeichen ueberschreiben 4R --> Schreib-Modus: eingegebene Zeichenfolge 4-mal o --> Schreib-Modus: Anfang naechste Zeile O --> Schreib-Modus: Anfang Zeile darueber cc --> Schreib-Modus: loescht Zeile und geht zum Anfang (#cc) cw --> Schreib-Modus: aendert Wort (3cw = 3 Worte) cW --> Schreib-Modus: dito - Trennzeichen nur noch ' ' C --> Schreib-Modus: aendert bis Zeilenende (#C) c$ --> Schreib-Modus: aendert bis Zeilenende (#c$) c0 --> Schreib-Modus: aendert bis Zeilenanfang c^ --> Schreib-Modus: aendert bis sichtbaren Zeilenanfang c4_ --> Schreib-Modus: aendert die naechsten 4 Zeichen (_ = space) 4c_ --> Schreib-Modus: aendert die naechsten 4 Zeichen (_ = space) cfz --> Schreib-Modus: aendert bis EINschliesslich naechstes z 2cfz --> Schreib-Modus: aendert bis EINschliesslich uebernaechstes z c2fz --> Schreib-Modus: dito ctz --> Schreib-Modus: aendert bis AUSschliesslich naechstes z s --> Schreib-Modus: ersetzt 1 Zeichen (5s = 5 Zeichen) S --> Schreib-Modus: aendert 1 Zeile (5S = 5 Zeilen) -------------------------------------------------------------------------- Beginnt Schreibvorgang neu (im Schreib-Modus!) Beginnt Schreibvorgang neu (im Schreib-Modus!) Cursor links bei autom. Zeicheneinfuegung (set autoindent) -------------------------------------------------------------------------- , schreibt z.B. ^M So werden Steuer-Zeichen geschrieben, die sonst aktiv wuerden. ------------------------------------------------------------------------ Gibt Information ueber aktuelle Datei (:f = dito) -------------------------------------------------------------------------- AUF VIELFaeLTIGE MoeGLICHKEITEN, KOMMANDOS ZU KOMBINIEREN, ACHTEN. Zahlen lassen sich vor nahezu alle Kommandos setzen, auch wenn hier nicht unbedingt ueberall angegeben (# ) ! Es handelt sich um Wiederholungsanzahlen oder (Zeilen-)Adressierungen. Viele Kommandos wirken nur in der aktuellen Zeile (z.B. #ctz) ! ------------------------------------------------------------------------ x loescht Zeichen (5x =Fuenf Zeichen) X loescht Zeichen, jedoch links vom Cursor (5X) dw loescht Wort (4dw) dW dito - Trennzeichen nur noch ' ' dd loescht Zeile(n) (3dd =Drei Zeilen) D loescht Zeile bis Zeilenende, ab Cursor d$ loescht Zeile bis Zeilenende, ab Cursor (#d$) d0 loescht Zeile bis Zeilenanfang, ab Cursor d^ loescht Zeile bis sichtbaren Zeilenanfang, ab Cursor d5_ loescht 5 Zeichen/Zeilen durch -druecken, , j oder k 5d_ loescht 5 Zeichen durch -druecken dtS loescht analog zu ctz, yfs, etc. - also bis ausschl. naechstes S d/wu loescht bis ausschliesslich 1. Vorkommen von 'wu'. :34d Loescht Zeile 34 :12,14d Loescht Zeilen 12 bis 14 :'a,'bd Loescht Zeilen zwischen den Marken (s.u.) a und b. :12,$d Loescht ab Zeile 12 bis Datei-Ende :.,$d Loescht ab aktueller Zeile bis Datei-Ende :1,$d Loescht gesamte Datei :%d Loescht gesamte Datei (% = 1,$) :g/ABC/d Loescht alle Zeilen, die ABC enthalten :g/^$/d Loescht alle Leerzeilen :12,76s/ABC//g Loescht saemtliche ABC in den Zeilen 12 bis 76 :g/ABC/s/// Loescht jeweils das erste ABC in allen Zeilen :g/ABC/s///g Loescht saemtliche ABC ------------------------------------------------------------------------ J Zeile unter der aktuellen wird an aktuelle angehaengt 1J,2J dito, verketten 2 Zeilen 4J Jetzt werden 4 verkettet, also 3 an die aktuelle gehaengt. beim Schreiben ist Zeilenbrechen und damit Rueckgaengigmachung (siehe auch ) ! ~ aendert von Kleinschreibung zu Grossschreibung und umgekehrt 8~ dito - jetzt aber 8 Zeichen . Wiederholt letzten Schreib- oder Loeschvorgang inklusive (auch z.B. "aP ; Wirkung nach u beachten) (#.) 3. Wiederholt 3-mal u Macht letztes Kommando rueckgaengig (Text loeschen oder erzeugen) U Restauriert die aktuelle beliebig (oft) bearbeitete Zeile ------------------------------------------------------------------------ ------------------------------------------------------------------------ $ Geht zum Zeilenende 0 Geht zum Zeilenanfang ^ Geht zum ersten sichtbaren Zeichen der Zeile 12¦ Geht zum 12. Zeichen in aktueller Zeile w Geht zu Wortanfaengen (#w) W Geht zu Wortanfaengen (#W) (andere Stop-Bewertung) b Geht zu Wortanfaengen, rueckwaerts (#b) B Geht zu Wortanfaengen, rueckwaerts (#B) (andere Stop-Bewertung) e Geht zu Wortenden (#e) E Geht zu Wortenden (#E) (andere Stop-Bewertung) fx Geht zum naechsten x (#fx) Fx Geht zum naechsten x, rueckwaerts (#Fx) tz Geht bis vor naechstes z (#tz) Tz Geht bis vor naechstes z, rueckwaerts (#Tz) ; , betreffen f, F, t, T : springen zu weiteren Antreffen (#;,) ------------------------------------------------------------------------ % Geht zu Klammern, wenn man dazwischen oder drauf ist. () [] {} ( ) Geht zum Anfang/Ende von Saetzen, die mit . ? ! und ' ' enden. { } Geht zum Anfang/Ende von Paragraphen (leere Zeilen, u.a.) [[ ]] Geht zum Anfang/Ende von Sektionen (^L oder { am ZA, u.a.) ------------------------------ AUCH im Schreib-Modus. 4 Bewegung um 4 Zeichen/Zeilen. o. h Bewegt nach links o. l Bewegt nach rechts o. + Bewegt nach unten, aber Cursor immer am erge Down> Eine Seite runter Eine Seite hoch 3 Drei Seiten runter 4 (Halbe) Seite hoch (Zahl davor bleibt in Erinnerung!) 8 (Halbe) ( " ) Cursor nach links oben in die Ecke ( = dito) 4H Wie Home, jedoch in die vierte Bildzeile von oben 7L Wie H, jedoch in die siebte Bildzeile von unten M Cursor auf mts :g/suchmuster/p Druckt alle Zeilen mit 'suchmuster' :23,44g/suchmuster/p dito, aus Zeilen 23-44 :g!/suchmuster/p Druckt alle Zeilen, mit NICHT 'suchmuster' :v/suchmuster/p noetig! Suchmuster bleibt waehrend vi-Sitzung erhalten. (n N :n) y'o Kopiert Zeile mit Marke o bis akt. Zeile bzw. umgekehrt y`o Kopiert Zeichen von Marke o bis akt. Zeichen bzw. umgekehrt "byH Kopiert akt. Zeile und alle in den Speicher b "by'o Kopiert in den Speicher b (siehe y`o und ma) "ay3+ Kopiert 4 Zeilen in mit a benamten Speicher "a4yy Kopiert 4 Zeilen in mit a benamten Speicher "A2yy Kopiert e, aus dem Speicher 0 P Kopiert yy-Zeile(n) vor aktuelle Zeile, aus dem Speicher 0 "ap Kopiert yy-Zeile(n) hinter aktuelle Zeile, aus dem Speicher a "aP Kopiert yy-Zeile(n) vor aktuelle Zeile, aus dem Speicher a "4p Kopiert yy-Zeile(n) hin. aktuelle Zeile, aus dem Speicher 4 (1-9) "6P Kopiert yy-Zeile(n) vor aktuelle Zeile, aus dem Speicher 6 (1-9) 0 bis 9 enthalten, werden nach Zeile 0 bewegt. :'a,'bm. Zeilen von a- bis b-Marke ( ) werden hinter die aktuelle Zeile bewegt. :12,14co0 Kopiert Zeilen 12 bis 14 hinter Zeile 0, also vor 1. :g/xABCy/co28 Alle Zeilen, die xABCy enthalten, werden hinter Zeile 28 kopiert. :3,72g/xABC12,23p Zeigt Zeilen 12 bis 23 Unterschied zwischen Vorwaerts- und Rueckwaerts-Kopieren (co0, co$): naemlich diorliegende Reihenfolge der Zeilen! (co$ behaelt bei) ES GIBT DIE ZEILE 0 = Puffer-Anfang! EIN PUNKT '.' (:.) adressiert stets die aktuelle Zeile! ------------- dito, nach links :108> Zeile 108 nach rechts :44,69> Zeilen 44 bis 69 nach rechts >4j Aktuelle und 4 weitere Zeilen darunter nach rechts 4>j dito (siehe Kommandos: c, y, j, k, etc.) 4>+ dito (siehe Kommandos: c, y, j, k, etc.) 4>> Vier Zeilen nach rechts, ab aktueller 4<< dito, nach links ------------------------------------ABC' durch 'CBA' (nur jeweils erstes Vorkommen in den Zeilen) :12,17s/ABC/CBA/g Ersetzt in Zeilen 12 bis 17 'ABC' durch 'CBA' (g = jeweils jedesn in den Zeilen) :2,333s/^/** / Fuegt an den Zeilenanfaengen 2 bis 333 '** ' ein. :g/^/s// w / Fuegt an allen Zeilenanfaengen ' w ' ein. :g/$/s// w / Haengt an alle Zeilene (Spezielle Bedeutung von '^' und '$' !) :g/ABC/s//CBA/g Ersetzt in der ganzen Datei 'ABC' durch 'CBA' :45,$g/ABC/s//CBA/g Wie zuvor, jedoch erst ab Zeile 45. :g/ABC/s//CBErsetzt in der ganzen Datei 'ABC' durch 'CBA' (p = Zeilen dabei herzeigen) (jeweils jedes Vorkommen in den Zeilen) :g/ABC/s//CBA/gc Ersetzt in elete> bricht ab) :g/QQQ/s/CBA/WWW/g In allen Zeilen, in denen QQQ vorkommt, wird jedes CBA durch WWW ersetzt. :4,79g/QQ/s/CB/WW/c dito, beschraenkt auf Zeilen 4-79 :g/ABC/s//xx&&&yy/g Macht ueberall aus 'ABC' 'xxABCABCABCyy', '&' steht (rechts) fuer das, was links resultiert. ABC (links) koennte auch / *[^s]printf/ sein! :g//s//~/gc '~' wirkt wie '&', erinnert sich jedoch den angezeigt. :g/\/p Alle Hier mit einem der Zeichen a bis h. :/a[^bcd]z Hier alle 'a·z', aber nicht abz, acz und adz. :/[^A-Z] Hier alle Zeichen, aber keine Grossbuchstaben. :/[h-k]*swqHier kann das, was [] beschreibt, beliebig oft vorkommen, also auch nullmal. :/[h-k][h-k]*swq/ Hier kann das, was [] beschreibt, ò1mal vorkommen. :/qas...sdd kommt hin: ' XYZ'. :g/^$/s/^M^M/ Wo vorher 1 Leerzeile war sind jetzt 3. ('^M'!) Sp Dieses Kommando AbcdefghBbcdefghCefefefefDjklm macht <-- daraus ! A bcd ef gh B bcd ef gh C ef ef ef ef D jklm Das hat was mit 1. und 2. Klammerebene zu tun. (bis 9 Ebenen) Die Klammer-Paare muessen nicht verschachtelder stehenden zaehlt die oeffnende Klammer \( jeweils um eins weiter: FTp[ix++][2]; FTp[NFND][0]; FTp[ifno][1]; :g/FTp\[\(....\)\]\[\([012]\)\]/s//FTp[\2][\1]/g FTp[2][ix++]; FTp[0][NFND]; F 'A'. Weiterhin: \{n\} \{n,\} \{n,m\} (?-mal 1-char-expr.) :g/Hier/s//\UHier/ Macht aus Hier HIER. ' gefolgt werden, fuer den das dann gelten soll. '\E' oder '\e' schaltet '\U' und '\L' ab. Sonderzeichen: ^, $, /, &, [, ], \, ., *, ~, ? Diese muessen -links stehend- mit \ maskiert werden. Das heisst, wenn sie als normale Zeichen aufgefasst werden sollen. (also: '\$'='$', usw.) (zwa/abc/. ------------------------------------------------------------------------ Bei Eingabefehlern (:asbw76@4#,) : oder mit zurueck bi begonnen wurde, wird b erzeugt. Wenn b bereits existiert, gibt's eine Warnung! :w! b Wenn b bereits existiert, wird b ueberschrieben! ueberwindet also Warnungen! :w>>b Haengt vi-Puffer-Inhalt an existierenden Datei-Inhalt von b an. arf auch ein Leerzeichen (Space) vor b stehen.) :w !cmd Schreibt Puffer-Inhalt zu einem UNIX-Kommando. :160,175w b Schreibt Puffer-Zeilen 160 bis 175 in b. (siehe ':w b') :160,1t gesamten Pufferinhalt. (% = 1,$) Nach % kein Leerzeichen! :160,185 !tr "m" "\234" (PC8-Zeichensatz) Ersetzt von 160-185 'm' durch '' (siehh :w !) :n! ueberwindet Warnungen, dass :w nicht benutzt wurde. :n e f Bearbeitet eine neue Datei-Liste, bestehend aus den Dateien e und f. Die alte Liste wird verlassen. :args ZeDatei-Liste an, mit Markierung der gerade in Arbeit befindlichen. :n und :args haben zueinander Bezug, nicht jedoch mit :f (s.u.). :rew Geht zur ersten Datei in der args-Lisn anderen als den, mit dem man vi aufrief: vi aaa ; jetzt: aaa --> nn Datei aaa existiert aber weiter, jedoch was ihren Inhalt angeht, bleibt dieser uneditiert, wenn nicht :w gemacht wurde, bevor :f nn gegeben wurde ! ine neue Datei nn hinein, um in dieser neuen weiterzueditieren. Und man muss den Puffer ausschreiben, damit nn auch existiert. Es sei denn, nn war vorher schon existent.elle Zeile. 3!!cmd Die Ausgabe eines UNIX-Kommandos ERSETZT aktuelle +2 Zeilen. !!cc -Zs % Fuer % wird der aktuelle Dateiname eingesetzt. ----------------------------------------------And. Wrkg. als bei ':!cd d') :x Editor beenden, mit Aktualisierung der 'echten' Datei. ZZ dito :x a Editorwq Wie :w und dann :q oder auch wie :x :wq! Wie :w! und dann :q. ueberwindet auch 'Read only' (Nur lesen) ! :wq b Wie ':w b' und dann :q. (vi-Warnung) :wq!vv Machen rueckgaengig. Folgende Zeichen sind im Kommandomodus nicht belegt: g q v K V ^A ^C ^K ^O ^Q ^T ^V ^W ^X ^Z (^=) - koennen also gemapt werden!