Etwas schneller Arbeiten

Die grundlegenden Kommandos aus dem Kapitel 1 ermöglichen es Text zu bearbeiten. Dieses Kapitel deckt einige weitere Kommandos ab, die Dir ein effizienteres Arbeiten ermöglichen. Diese Befehle schließen folgendes ein:
  1. Zusätzliche Bewegungs Befehle
  2. Schnelle Suche innerhelb einer Zeile
  3. Zusätzliche Lösch- und Änderungsbefehle
  4. Der wiederholen Befehl
  5. Tastatur Macros (wie man Befehle aufzeichnet und wiedergibt)
  6. Eingabe von Sonderzeichten
Was ich während des Schreibens dieses Kapitels feststellte, ist die Vielzahl der Möglichkeiten, um sich in einem Text zu bewegen. Obwohl ich vi und jetzt vim als meinen Haupteditor schon fast 15 Jahre verwende, habe ich mich nie meine Zeit damit verschwendet alle zu lernen. Ich komme mit den ca. 10%, die ich mag, aus.

Es gibt ein Fülle von Möglichkeiten, um Dinge mit Vim zu erledigen. Dieses Kapitel beschreibt eine nützliche Auswahl aus all den möglichen Kommandos.

Sich wortweise bewegen

Lasst uns mit dem Bewegen beginnen. Um den Cursor ein Wort nach vorne zu bewegen, nimm das w Kommando. Der b Befehl bewegt den Cursor wortweise rückwärts. Wie bei den meisten vim Befhelen, kannst Du auch hier ein nummerisches Präfix voranstellen um über mehrere Wörter zu springen. 4b beispielsweise, bewegt. Abbildung 2.1 zeigt wie dieser Befehl arbeitet.

Wortweise springen

Abbildung 2.1: Wortweise springen

Der $ Befehl bewegt den Cursor zum Zeilenende. In Wirklichkeit, passen eine ganze Menge Tasten auf das "Zeilenendekommando". Die Vim Namen dieser Tasten sind $, <Ende> und <kEnde> (Die <kEnde> Taste ist vims Name für das Ende auf dem Nummerblock). - Ende = End in vim und auf einer US Tastatur -

Das $ Kommando verwendet auch ein numerisches Argument. Wenn ein Argument angegeben ist, wandert der Editor zur nächsten Zeile. Beispielsweise bringt Dich 1$ an das Ende der ersten Zeile (die Zeile in der Du stehst), 2$ an das Ende der nächsten zeile und so weiter. Abbildung 2.2 erklärt wie dieses Kommando wirkt.

Der ^ Befehl bringt Dich zum ersten nicht leeren Zeichen einer Zeile. Die <Pos1> und <kPos1> (Home und kHome in vim/US-Tastatur) Taste bringt Dich an den Anfang der Zeile, wie Abbildung 2.3 zeigt (Der 0 [null] Befehl macht das gleiche).

Wie alle anderen vorhergehenden Befehle, kann auch dieser ein nummerisches Argument verwenden. Es hat auf den Befehl keinen Einfuß, aber Du kannst es, wenn Du willst ruhig angeben.

Das $ Kommando

Abbildung 2.2: Der $ Befehl

Das ^ <home> oder <khome> Kommando

Abbildung 2.3: Die ^ und <HOME> Befehle

Suchen innerhalb einer Zeile

Sich bewegen ist das häufigste was Du beim editieren machst. Einer der am besten benutzbaren Bewegungsbefehle ist der Einzelbuchstaben Suchbefehl. Der Befehl fx (vorwärts Suche-forward search) durchsucht eine einzelne Zeile nach dem Buchstaben x.

Nimm Beispielsweise mal an, dass Du am Anfang der folgenden Zeile stehst:

	    To err is human. To really foul up you need a computer.
	 
Nimm an, Du willst zum h von human gehen. Führe also lediglich das Kommando fh aus und der Cursor steht über dem h.

To err is human. To really foul up you need a computer
Um an das Ende des Wortes really zu kommen führe fy aus. Du kannst natürlich einen Zähler angeben und somit um 5 Worte nach vorne springen, indem Du 5f<Space> eingiebst.


Hinweis In Wirklöichkeit wird 5 Leerzeichen nach vorne gesprungen. Falls mehrere Leerzeichn zwischen Deinen Wörtern liegen, springt der Befehl natürlich nicht 5 Wörter nach vorne

Das F Kommando sucht rückwärts (nach links). Abbildung 2.4 zeigt die Wirkung des f und F Kommandos.

Der tx Befehl (suche bis - search til) arbeitet wie der fx Befehl, stoppt jedoch einen Buchstaben vor dem Zeichen nachdem gesucht wird. In der Rückwärtsversion ist dies das Tx Kommando. Abbildung 2.5 zeigt wie dieses Kommando arbeitet.

das f und F Kommando

Abbildung 2.4: Der f und F Befehl

Das t und T Kommando

Abbildung 2.5: Der t und T Befehl

Manchmal wirst Du eine Suche starten um lediglich festzustellen, dass Du den falschen Befehl eingegeben hast. Beispielsweise tippst Du f um eine Suche vorwärts zu starten und stellst dann fest, dass Du eigentlich F gemeint hast, um rückwärts zu suchen. Um eine Suche abzubrechen, wähle <ESC> als das zu suchende Element. Mit anderen Worten ist f<ESC> eine abgebrochene vorwärts Suche. (Hinweis: <ESC> bricht die meisten Aktionen nicht nur Suchen ab).

Zu einer Zeile springen

Wenn Du ein C oder c++ Programmierer bist, bist Du vertraut mit Fehlermeldungen wie der folgenden:
prog.c:3:'j' undeclared (first use in this function) 
Es wird Dir mitgeteilt, dass Du etwas an Zeile 3 korrigieren willst. Aber wie findest Du Zeile 3?

Ein Weg ist es 9999k auszuführen, um an den Anfang der Datei zu springen und ein 2j, um 2 Zeilen nach unten zu springen. Es ist kein besonders gutes Vorgehen, aber es funktioniert.

Ein viel besserer Weg ist es in diesem Fall das G Kommando zu verwenden. Dieser Befehl positioniert Dich in der im Argunment angegebenen Zeile. Beispielsweise bringt Dich 3G in die 3. Zeile (ebenso bringt Dich 1G besser als 9999k in die erste Zeile).

Ohne Argument, gelangst Du in die letzte Zeile (Für eine bessere Navigation durch die Fehlermeldungen des Compilers, siehe Kapitel 7, "Befehle für Programmierer" um mehr Informationen über :make und :clist zu bekommen.

Wissen, wo Du in der Datei stehst

Woher weisst Du, wo genau innerhalb der Datei Du Dich genau befindest? Das kannst Du auf verschiende Weise herausbekommen. Die erste Art ist es die Zeilennummerierung mit :set number einzuschalten:

Zeilennummerierung eingeschaltet

Abbildung 2.6: Eingeschaltete Zeilennummerierung

Der Vim Editor ist extrem konfigurierbar und hat eine Menge Optionen. Du kannst das :set Kommando auf verschiedne Weise, wie in Kapitel 28 "Anpassen der Erscheinung und des Verhaltens des Editors" beschrieben, gebrauchen. Die number Option ist ein Boolsche Option, was bedeutet das sie an und abgeschaltet werden kann. Um sie anzuschlten gebrauche den Befehl :set number. :set nonumber schaltet die Option wieder ab. Abbildung 2.7 zeigt das Ergebnis diedes Kommandos.

Zeilennummerierung abgeschaltet

Abbildung 2.7: Ergebnis von :set nonumber

Wo bin ich

Der STRG-G Befehl zeigt eine Statuszeile, die Dir anzeigt, wo in der Datei Du derzeit stehst. z.B.:
"c02.txt" [Modified] line 81 of 153 --52%-- col1
Hiermit wird gesagt, dass Du derzeit eine Datei mit dem Namen c02.txt bearbeitest und das diese Datei seit dem Start der Bearbeitung verändert wurde. Der Cursor steht in Zeile 81 von 153 oder anders formuliert ca. 52% hinter dem Beginn der Datei. derzeit steht der Cursor in Spalte 1.


Hinweis
Diese Zeilenummern sind nur zu Deiner Information. Sie werden beim beenden nicht in die Datei geschrieben.

Das STRG-G Kommando

Abbildung 2.8 Das STRG-G Kommando

Manchmal wirst Du eine geteilte Spaltennummer sehen (z.B. col2-9). Das weisst darauf hin, dass die Cursor über der Spalte 2 steht. Da jedoch Spalte 1 einen TAB enthält, ist die Spalte am Bildschirm Spalte 9. Abbildung 2.8 zeigt ein Ergebnis eines typischen Befehls.

Vorwärts und rückwärts blättern

Der STRG+U Befehl blättert einen halben Bildschirm nach oben(Nach oben ist in diesem Fall rückwärts in der Datei; der Text bewegt sich dabei auf dem Bildschirm nach unten. Mach Dir keine Sorgen, wenn Du ein paar Probleme hast Dir zu merken welcher Teil oben ist. Die meisten Programmierer haben die gleichen Probleme). Der STRG-D Befehl blättert eine halbe Seite nach unten. Abbildung 2.9 zeigt wie diese Befehle arbeiten.

Blättern

Abbildung 2.9: Das Erbenis der STRG-Uund STRG-D Befehle

Text löschen

Wie Du in Kapitel 1 gelernt hast, löscht der dd Befehl eine Zeile. Der dw Befehl löscht ein Wort. Du wirst wohl das w Kommando als Bewegungsbefehl für Wort erkannt haben. Tatsächlich kann auf den d Befehl jeder beliebiger Bewegungsbefehl folgen. Damit wird von der derzeitigen Position bis zum Ziel des Bewegungsbefehls gelöscht (man beschreibt daher die Schreibweis des d Befehls auch als dmotion).

Der 3w Befehl bewegt den Cursor beispielsweise um 3 Wörter vorwärts. Der d3w Befehl löscht 3 Wörter wie in Abbildung 2.10 gezeigt (Du kannst den Befehl sowohl als d3w als auch als 3dw; schreiben. Beide Schreibweisen arbeiten gleich).

3Wörter löschen

Abbildung 2.10: Der d3w Befehl

Bis Zeilenende löschen

Abbildung 2.11: Der d$ Befehl

Das $ Kommando bewegt den Cursor zum Zeilenende. Das d$ Kommando löscht, wie Abbildung 2.11 zeigt, von der aktuellen Position bis zum Zeilenende. Eine Abkürzung (shortcut) dafür, ist der D Befehl.

Wohin mit dem Zähler (3dw oder d3w)?

Die Befehle 3dw und d3w löschen 3 Wörter. Wenn Du besonders kleinlich in diesem Dingen bist: Der erste Befehl, 3dw, löscht ein Wort 3 mal. Der Befehl d3w löscht einmal 3 Wörter. Dies ist ein Unterschied ohne Auswirkung.

Du kannst auch 2 Zähler verwenden wie 3d2w. Dieser Befehl löscht 3 mal und bei jedem mal 2 Wörter, zusammen also 6 Wörter.

Text ändern

Das c Kommando ändert Text. Es verhält sich genauso wie der d Befehl, jedoch bringt es Dich anschließend in den Einfügemodus. Beispielsweise ändert cw ein Wort oder, besser gesagt, es löscht ein Wort und bringt Dich in den Einfügemodus. Abbildung 2.12 beschreibt wie dieser Befehl arbeitet.

Es gibt das Sprichwort, dass es für jede Frage eine einfache Antwort gibt die einfach, eine die klar und eine die falsch ist. Das ist auch hier der Fall bei dem cw Befehl. Der cBewegung Befehl arbeitet genauso wie der dBewegung Befehl mit einer Ausnahme: den cw und dw Befehlen. Während cw den Text bis zum auf das Wort folgenden Leerzeichen löscht (und dann in den Einfügemodus springt), löscht das dw das Wort und das darauf folgende Leerzeichen.

Das cw Kommando

Abbildung 2.12: Wie cw arbeitet

Der cc Befehl arbeitet auf der ganzen Zeile. Das heißt, er löscht die Zeile in geht in den Einfügemodus. Anders ausgedrückt cc arbeitet auf der ganzen Zeile wie dd. Genauso wie c$ oder C von der aktuellen Cursor Position bis zum Zeilenende ändert.

Der . Befehl

Der . Befehl ist einer der einfachten und mächtigsten Befehle in Vim. Er wiederholt das letzte Lösch- oder Änderungskommando. Nehmen wir an, Du bearbeitest eine HTML Datei und willst alle <B> Tags löschen. Du positionierst den Cursor auf dem ersten < und löscht das <B> indem Du df> drückst. Dann gehst Du zum < des näcsten </B> und löscht es indem Du den . Befehl benutzt. Der . Befehl führt das letzte Änderungskommando aus (in diesem Fall das df>). Um einen weiteren tag zu löschen positioniere den Cursor auf dem nächsten < und benutze den . Befehl erneut. Abbildung 2.13 erläutert, wie das funktiniert.

Das . Kommando

Abbildung 2.13: Benutzung des . Befehls

Zeilen zusamenfügen

Der J Befehl verbindet die aktuelle Zeile mit der nächsten. Ein Leerzeichen wird am Ende der ersten Zeile eingefügt, um die zusammengefügten Teile zu trennen, wie in Abbildung 2.14 dargestellt.Falls ein Zähler mit angegeben wird werden entsprechend viele Zeilen zusammengefügt, das Minimum ist 2. Zeilen.

Das J Kommando

Abbildung 2.14: Das J Kommando

Buchstaben ersetzen

Der rx Befehl ersetzt den Buchstaben unter dem Cursor gegen den Buchstaben x. Abbildung 2.15 zeigt, wie Du mit dem r Befehl ein z gegen ein s austauscht.
Dem r Kommando kann ein Zähler vorangestellt werden, der der Anzahl der zu ersetzenden Buchstaben entspricht. In Abbildung 2.16 gehen wir zum Zeilen Anfang (das ^ Kommando) und führen 5ra aus um die ersten 5 Buchstaen durch ein a zu ersetzen.

Das r Kommando

Abbildung 2.15: Das Ersätzungskommando (r)

Das r Kommando mit Zähler

Abbildung 2.16: Ersätzungs (r) Kommando mit einem Zähler


Hinweis
Das r Kommando behandelt <ENTER> auf eine spezielle Weise. Es wird nur ein <ENTER> eingefügt egal wie groß der Zähler ist. Daher fügt 5ra5 mal den Buchstaben a ein jedoch ein 5r<ENTER> ersetzt 5 Buchstaben durch ein einziges <ENTER>.
Achte daruf wo Du den Zähler einfügst. Der 5rx Befehl ersetzt 5 Buchstaben durch den Buchstaben x, wohingegen r5x den Buchstaben unter dem Cursor durch 5 ersetzt (r5) und einen Buchstaben löscht (x).

Groß/Kleinschreibung ändern

Das ~ Kommando ändert die Groß/Kleinschreibung eines Buchstabens. Falls ein Zähler angegeben wird werden entsprechend viele Buchstaben geändert. Abbildung 2.17 zeigt ein Beispiel:

Der ~ Befehl

Abbildung 2.17: Groß/Kleinschreibung ändern mit ~.

Tastatur Macros

Das . Befehl wiederholt die vorhergehende Änderung. Aber was, wenn Du etwas komplexeres machen willst als eine einfache Änderung? Hier brauchst Du Tastatur Macros. Der q<buchstabe> Befehl speichert Tastaturanschlänge in einem mit <Buchstabe> benannten Register ab (der Buchstabe muss zwischen a und z liegen).
Um die Aufzeichnung zu beenden, gib einfach nochmal q. Das so gespeicherte Macro kann durch den @<Buchstabe> wieder aufgerufen werden. (Dem kann man auch einen Zähler vorranstellen, um dieses Macro häufiger auszuführen)
Schau Dir an wie man diesen Befehl in der Praxis verwendet. Du hast eine Dateiliste wie:

stdio.h
fcntl.h
unistd.h
stdlib.h

und was Du daraus machen willst ist:

#include"stdio.h"
#include"fcntl.h"
#include"unistd.h"
#include"stdlib.h

Du beginnst indem Du den Cursor auf dem ersten Buchstaben der ersten Zeile positionierst. Jetzt gibst Du die folgenden Befehle ein:

qa Beginne mit der Aufzeichnung des Macros in das Register a.
^ An den Anfang der Zeile springen.
i#include">ESC> Einfügen des Ausdrucks #include" am Zeilenanfang.
$ Gehe zum Zeilenende
a"<ESC> Hänge Anführungszeichen an das Ende der Zeile
j Gehe in die nächste Zeile
q Beende die Macroaufzeichnung

Jetzt, nachdem Du diese Arbeit einmal gemacht hast, kannst Du die Änderung wiederholen indem Du den Befehl @a eingiebst. Alternativ kannst Du auch 3@a verwenden, da Du die Änderung 3 mal durchzuführen hast. Abbildung 2.18 zeigt wie Du das macro definierst und startest.

Macroaufzeichnung

Abbildung 2.18: Ein Macro definieren und gebrauchen

Digraphs

Einige Zeichen befinden sich nicht auf der Tastatur - zum Beispiel das Copyright Zeichen (©). Um diese Zeichen mit Vim zu schreiben, benutzt Du sog. digraphs, wo 2 Buchstaben einen representieren. Um beispielsweise ein © einzugeben tippst Du STRG-K Co.
Um herauszufinden welche digraphs möglich sind, benutze das folgende Kommando:
:digraphs
Vim wird Dir die digraphs Belegungstabelle anzeigen, wie in Abbildung 2.19 gezeigt. Dies zeigt Dir beispielsweise, dass der digraph den Du mit dem Kommando STRG-K !I bekommst, dass Zeichen (¡) ist. Dies ist das Zeichen Nummer 161 (Du könntest es auch mit STRG-V 161 eingeben.
Warnung
Die dirgaphs gehen davon aus, dass Du einen Standard ISO-646 Zeichensatz verwendest. Obwohl dies ein internationaler Standard ist, muss Deine Anzeige oder Dein Drucksystem diesen Zeichensatz nicht verwenden.

Digraphstabelle

Abbildung 2.19: Die digraphs Tabelle


vorheriges Kapitel Inhaltsverzeichnis nächstes Kapitel

Maik Holtkamp Letzte Änderung: Die Dez 3 21:50:04 CET 2002 Vim_logo