Diese Seite ist optimiert für eine Auflösung von min. 1280x1024.

facebook   google   twitter   digg   email  





VIM



vi ist DER editor unter linux - zumindest auf der Konsole ist er in der Regel immer installiert und verfügbar. Ich behandle hier die etwas komfortablere Version vim. Wenn ich von vi spreche so meine ich also vim. Auf den ersten Schein hin ist er etwas kompliziert, jedoch sehr mächtig. Der vi kennt 3 Modi:

- Befehlsmodus (der beim öffnen des vi standartmässig der erste ist und man ansonsten durch drücken von [ESC] erreicht)
- Einfügemodus (den man im Befehlsmodus durch drücken von [i] erreicht)
- Visuellmodus (den man im Befehlsmodus durch drücken von [v] erreicht)

Nun etwas Praxis. Um eine Datei zu editieren benutzt man das Kommando

vi datei

Nun öffnet sich der vi.

putty_1.jpg

Um etwas in der Datei zu bearbeiten drückt man also [i]. Jetzt befindet man sich im "Einfügemodus (Insert-Modus) den man auch daran erkennt, dass im unteren Bildschirmrand "--Insert--" erscheint.

putty_2.jpg

Ist der Text geschrieben, wechselt man wieder in den Befehlsmodus mittels [ESC] zurück.
Damit die Datei mit den Änderungen gespeichert wird muss man nun folgende Befehlsreihenfolge eingeben (erscheinen auch im unteren Bildschirmrand, wie das "-- INSERT --"):
[:] [w]

putty_3.jpg

Existiert die Datei nicht, wird Sie angelegt:



Auch hier kommt wieder eine Status-Meldung ganz unten: "datei" 1L, 27C written 1,27 All
1L steht für 1 Line (Zeile), 27C für 27 Columns (Spalte, Zeichen). Das dahinter folgende "1,27" gibt an, wo sich der Cursor befindet (wo man also in der Datei gerade unterwegs ist). Was es mit dem "All" auf sich hat, habe ich selbst noch nicht rausfinden können :o). Wenn die Datei schreibgeschützt ist (-r--r--r--, 444), kommt folgender Fehler:

putty_5,jpg

Ist man Eigentümer der Datei, so kann man das Schreiben erzwingen mit dem Befehl [:] [w] [!]. Nicht allerdings, wenn die Datei einem nicht selbst gehört - sonst wäre ja eine manipulation aller Dateien möglich :o).
Interessant ist es auch, wenn man 2 Dateien gleichzeitig editieren will. Dies ist mit dem Kommando [:] [split] möglich (split einfach ausschreiben):

putty_6.jpg

Mit meinem riesigen Putty-Fenster macht das natürlich keinen Sinn, allerdings soll es nur zur veranschaulichung dienen und die Grafiken sollen ja nicht ewig laden :o). Das Fenster (von oben nach unten, von unten nach oben) kann man mit [w] [w] wechseln. Auch funktioniert [:] [vsplit], was eine vertikale Teilung des Bildschirms bewirkt:

putty_7.jpg

Den vi schliessen kann man mit dem Befehl [:] [q]. Bei mehreren Fenstern mit [:] [q] [a]. Das "q" steht hierbei für quit, das "a" für alle. Auch lässt sich das "q" mit dem "w" und dem "!"kombinieren: [:] [w] [q] [a] [!].
Um eine Datei zu schliessen ohne sie zu speichern ist der Befehl [:] [q] [!] notwendig.

Einige wichtige Funktionen sollen noch angesprochen werden:
- kopieren und einfügen
- suchen
- suchen und ersetzen
- vergleichen
- Syntax-Highligting
- Virsueller Modus

Kopieren und einfügen ist etwas gewöhnungsbedürftig. Eine Zeile (die in dem sich der Cursor befindet) kann man im Befehlsmodus mit [y] [y] kopieren und anschliessend (an der Stelle, an die man den Cursor bewegt) mit [p] einfügen.

Ganze Textblöcke kopiert man so:
Bewege den Cursor an den Anfang, drücke [m] [a] (im Befehlsmodus).
Bewege den Cursor an das Ende des Textblockes und drücke [y] ['] [a] (im Befehlsmodus).
Einfügen wieder mit [p] (wie bei dem Beispiel mit einer Zeile kopieren).

Suchen ist relativ einfach zu bewerkstelligen. Einfach im Befehlsmodus [/] drücken und das Suchwort eingeben. Auch Reguläre Ausdrücke funktionieren. Mit der Taste [n] kann zur nächsten Fundstelle gesprungen werden.

Suchen und ersetzen ist wiederum etwas komlexer. Erstmal ein Beispiel, dann die Erklärung:

putty_8.jpg

Das ist der Befehl an sich, und das ist dann das Ergebnis:

putty_9.jpg

Wir haben nun mit dem Befehl
[:] [%] [s] [/] [suchbegriff] [/] [ersetzendurch] [/] [g]
Alle Fundstellen von "in" durch "aus" ersetzt. Anstatt dem [%] kann auch eine Zeilenangabe stehen. [1] [,] [5] an der stelle von [5] würde nur in den Zeilen 1-5 suchen und ersetzen ([%] hingegen im ganzen Dokument). Anstatt dem [/] kann auch ein anderes Trenn-Zeichen verwendet werden:
[:] [%] [s] [:] [suchbegriff] [:] [ersetzendurch] [:] [g]
Das ist wichtig, falls man Pfade ersetzen will, die ja bekanntlich mit "/" getrennt werden, ansonst muss man jeden Slash (/) mit einem vorangestellten Backslash (\) maskieren. Beispiel:
Suche in den Zeilen 4-8 nach /usr/bin und ersetze es durch /usr/sbin.
Dies würde nur mit dem 2. Beispiel klappen. Datei vor dem suchen und ersetzen:

putty_17.jpg

Der Befehl an sich:

putty_18.jpg

Die geänderte Datei:

putty_19.jpg

Man bekommt angezeigt, dass es in 4 Zeilen 5 gefundene (und ersetzte) Übereinstimmungen gab. Natürlich kann man auch &aumml;hnlich wie mit grep nach regulären Ausdrücken suchen und ersetzen, jedoch würde das den Rahmen meines knappen Tutorials für den vim sprengen :o).

Vergleichen kann sehr wichtig sein. Wenn z.B. in einer Konfigurations-Datei etwas geändert wurde, kann man mittels vi und der Originalen Datei genau feststellen, was sich ge„ndert hat. Dazu startet man den vi wie folgt:

vi -d geaendertedatei originaldatei

Ich habe im Beispiel 2 Dateien mit folgendem Inhalt:

1. Datei:

Ich
bin
Unkel
Peter
Fan

2. Datei:

Ich
bin
Onkel
Peter
Fan

Dann bekommt man folgendes Bild:

putty_10.jpg

Der Unterschied wird direkt farbig hinterlegt.

Eine Weitere erwähnenswerte Funktion ist das Syntaxhighlighting. Es wird mittels [:] [syntax on] ein bzw. mit [:] [syntax off] ausgeschaltet. Normal wäre z.B. folgendes Bild:

putty_12.jpg

Mit angeschaltetem Syntax-Highligthing sieht es dann so aus:

putty_13.jpg

Es kann zu Problemen kommen wenn vim durch die Dateiendung die Datei keiner "Sprache" automatisch zuordnen kann. Man editiert z.B. die Datei navbar.inc und möchte das Syntax-Highligting wie unter PHP verwenden. Da vim durch die Datei-Endung immer das entsprechende Highliting erkennt (für .html html, für .php php, etc.), dies aber bei "inc" nicht gegeben ist, kann man es aber auch explizit "anfordern" mittels [:] [set] [syntax=][sprache]

putty_14.jpg

Eine weitere Erwähnung wert ist die ai-Funktion (auto indent - automatische Einrückung). Sie wird mittels [:] [set autoindent] an und mittels [:] [set noautoindent] ausgeschaltet. Sie ist unter Umständen auch dafür verantwortlich, dass beim einfügen von kopiertem Text, der Text pro Zeile immer um eine Einrückung weiter nach rechts verschoben wird. Fügt man z.B. den folgenden Text mit aktiviertem ai ein, passiert das hier:

Einzufügender Text:

Textzeile 1
Textzeile 2
Textzeile 3

putty_15.jpg

Gedacht ist der ai wohl hauptsächlich für die programmierende Zunft. Möchte man in seinem Quelltext eine Einrückung vornehmen die über mehrere Zeilen geht, so kann man mit ai bewirken, dass man beim drücken von [Enter] nicht wieder am Anfang der Zeile, sondern an der eingerückten Position herrauskommt:

putty_16.jpg

Wem die Angabe rechts unten nicht reicht, der kann auch die Zeilennummerierung komplett einschalten mittels [:] [set] [number]:

putty_20.jpg

[:][set] [nonumber] schaltet den Zauber übrigens wieder ab :o)
Was auch nützlich sein kann, ist das abschalten des automatischen Zeilenumbruchs mittels [:][set] [nowrap]:

putty_21.jpg

putty_22.jpg

Den Curser dann einfach nach links oder rechts bewegen um zur gewünschten Stelle zu gelangen.

Die Wiederhol-Funktion kann mit dem Befehl "[Zahl] [i] Eingabe [ESC]" durchgefhrt werden. Der Befehl wiederholt dabei die Eingabe so oft, wie die Zahl, die davor angegeben wurde.

Z.B.: 80[i]#[ESC] macht 80 #-Zeichen in meine Datei. An der Stelle, an der ich mich gerade befinde.
ACHTUNG: Im vim erfolgt keine Einblendung in der unteren Zeile dieses Befehls, wie das von z.B. ":syntax on" bekannt ist! Man sieht lediglich die Eingabe, die man nach drücken von [i] vornimmt.

Im vim kann man sogar sogenannte Marken setzen. Dies kann in grossen und langen Dateien sich als sehr nützlich erweisen. Eine Marke kann man im Befehlsmodus durch dürcken der Taste [m][Buchstabe] erwirken. Welchen Buchstaben man nimmt ist egal. Demnach kann man also 25 Marken setzen (ob es mit Zahlen tut, hab ich nicht versucht). Zur gesetzten Marke kommt man durch drücken der Tasten ['][Buchstabe] im Befehlsmodul. Das ['] ist übrigens nicht der Akzent, sondern der Apostroph :o)

Virsueller Modus
Dieser ist z.B. zum Markieren von Text gedacht:

putty_17.jpg

Aktivieren kann man diesen durch drücken der Taste [v] im Befehlsmods. Ersichtlich ist er durch das "-- VISUAL --" in der letzten Zeile. Mit ihm ist es z.B. möglich, exakt den makierten Text durch drücken von [Entf] zu löschen oder z.B. zu kopieren.
Näher habe ich mich mit dem Virsuellen Modus leider noch nicht auseinander gesetzt.

Shell.
Man kann auch im vi eine Shell öffnen. Das Kommando dazu lautet ":sh".
Nach der Eingabe scheint der vi zu verschwinden. Man befindet sich wieder auf der Konsole. erst beim eingeben von "exit" ist man wieder im vi.

Zum Schluss noch ein Leckerbissen für alle, die sich entschlossen haben, vim als Standart-Werkzeug einzusetzen :o). Man kann Einstellungen wie z.B. das einschalten des Syntax-Highlitings auch per default einschalten. Das geht sogar meistens beim Provider. Dazu legt man lediglich in seinem Heimat-Verzeichnis eine Datei mit dem Namen ".vimrc" an. Darin legt man dann alle Einstellungen fest. Meine sieht z.B. so hier aus:

putty_23.jpg

Ahja, neben der Tatsache, dass ihr nun wisst, wo und wie man Einstellungen Speichert, seht Ihr hier auch noch, wie man den vim anweisen kann, dass er beim öffnen einer Datei wieder an die Stelle springen soll, an der man vor dem beenden zuletzt war:

if has("autocmd")
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\   exe "normal g`\"" |
\ endif
endif

Nett, oder? Es gibt von meinem Tutorial abgesehen bestimmt noch ne halbe Million Einstellungen und Funktionen, auf die ich nicht eingegangen bin, weil Sie entweder zu kompliziert zum erklären sind, ich Sie nicht kenne, diese nicht sonderlich gebräuchlich sind, ich Sie einfach nicht kenne, nicht verstanden habe oder sonstiges :o). Aber mit der Taste [F1] kann man sich im vim weiter bilden:

putty_24.jpg

Als allerletztes sei noch erklärt, dass man den vi auch von der Kommandozeile aus steuern kann mit dem Schalter "-c". Um z.B. alle Vorkommnisse von Onkel nach Tante in der Datei test.txt zu ändern und die Datei dann zu speichern und zu schliessen gibt man das hier ein:
vim -c '%s/Onkel/Tante/g' -c 'wq' text.txt



  logo