Montag, 30. September 2013

 

vim Einführung (POS1: 2BHIF)

Vim ist ein hervorragender Editor mit Syntaxhervorhebung und Vergleichsfunktionen, mehreren Darstellungsfenstern und vielen anderen nützlichen Funktionen. Leider ist der Einstieg damit nicht immer ganz leicht, da vim eine Weiterentwicklung des Editors vi ist, den es bereits in den 80er Jahren gab, wo Benutzerfreundlichkeit noch eine andere Bedeutung hatte als heute. Weiterhin erscheint vim im unkonfigurierten Zustand zunächst erstmal sehr langweilig und es ist mühselig eine passende Konfiguration zu erstellen.
Der vi ist praktisch auf jedem Linux-System verfügbar und kann von der Shell (Terminal) aus verwendet werden. Daher ist es praktisch, wenn man den vi(m) beherrscht, wenn man einen Server (z.B. Web-Server) über das Internet warten muss. Die wichtigsten Funkionen kann man probieren und üben mit vimtutor
Weitere Dokumentation finden Sie hier:
vim Kurzreferenz auf LinWiKi
vim Homepage www.vim.org
vim Quick Reference Card (2 Seiten)
Wir verwenden eine spezielle Konfigurationsdatei für den vim. Im Laufe dieses Schuljahres werden wir Ihnen diese Datei (eigentlich eine überarbeitete Version, denn die bisherige Version ist hauptsächlich für C-Programmierung eingerichtet) zur Verfügung stellen. Also, bleiben Sie dran oder suchen Sie auf www.vim.org/scripts nach passenden Scripts für den vim.

vim ist eine Erweiterung des Standard-Unix-Editors vi. vim steht für vi improved.
vim gibt es nicht nur für Unix-Plattformen, sondern auch für andere Betriebssysteme (Windows, OSX). Siehe dazu auch http://www.vim.org/. vim ist frei verfügbar.
Es ist besser, einen Editor wirklich gut zu beherrschen als viele verschiedene Editoren oder Entwicklungsumgebungen nur mittelmäßig bedienen zu können. Der vim eignet sich besonders als universeller (Programmier-)Editor, da er für jede Plattform verfügbar ist und hochgradig konfigurierbar bzw. programmierbar ist.
vi gibt es auf jedem Unix-ähnlichem System. Wenn nichts mehr geht, dann muss man u.U. dem vi nehmen und in den Konfigurationsdateien Änderungen vornehmen.

vim hat (wie vi) mehrere Betriebsmodi:
Dies hat den Vorteil, dass man einen mächtigen Editor (vim ist programmierbar, arbeitet mit regulären Ausdrücken usw.) auch über einfache Terminals bedienen kann. Alle Funktionen sind über eine Standardtastatur mit Escape-Taste verfügbar. Man braucht keine Funktionstasten und keine Cursortasten. Funktions- und Cursortasten sowie Maus können bei geeigneten Terminals (X-Window System, Console) verwendet werden.
Nachteilig ist der relativ hohe Lernaufwand.

Befehlsmodus

Grundsätzlich kann jeder Befehl mehrfach ausgeführt werden, indem zuerst eine Anzahl angegeben wird. Z.B. 10dd löscht 10 Zeilen (siehe unten), 2dw löscht 2 Worte.
[Anzahl] Befehl [Taste]
[Anzahl] Befehl [Bereich]
Cursorbewegung
k hinauf
h l links rechts
j hinunter
^F orward page
^B ackward page
^D own half page
^U p half page
w ord right
b ack word
[line]G oto line (default letzte Zeile)
( Sätze zurück
) Sätze vorwärts
{ Absätze zurück
} Absätze vorwärts
fc gehe zum Zeichen c in der aktuellen Zeile
'm gehe zu Marke m
ma mark a (setze Marke a), Marken werden auch für Lösch-, Änder- und Kopieroperationen verwendet (sieh weiter unten)
Löschen (d elete)
dd Zeile löschen
dw Wort löschen
x Zeichen unter Cursor löschen
X Zeichen links von Cursor löschen
D bis Zeilenende löschen
Bereichd löschen des Bereichs
d'marke löschen bis zur Marke marke (ein Buchstabe, vorher gesetzt mit mmarke)
Ändern
> schiebt Text nach rechts (shiftwidth)
< schiebt Text nach links (shiftwidth)
i Einfügen vor Cursor (insert)
a Einfügen nach Cursor (append)
I Einfügen Zeilenanfang (Insert)
A Einfügen Zeilenende (Append)
o Öffnet neue Zeile darunter (open line)
O Öffnet neue Zeile darüber
J (join) hänge die nächste Zeile an die aktuelle Zeile an (mit Leerzeichen getrennt)
rx ersetzen des aktuellen Zeichens durch das Zeichen x (kein ESC nötig)
cw ändert Wort (change word)
Bereichc ändert Bereich (vgl. Bereich angeben)
c'marke ändert Bereich bis zur Marke
Bereich angeben (markieren)
Cursor an ein Ende des Bereichs setzen, v eingeben, den Cursor zum anderen Ende bewegen und den gewünschten Befehl eingeben. Zeilenweise markieren mit V.
Wurde :set mouse=a gesetzt, dann kann auch mit der Maus markiert werden.
Fast alle Befehle arbeiten mit einem so markierten Bereich.
Kopieren/Einfügen
Bereichy "yank", Bereich wird in den Puffer kopiert
y'marke kopiert Bereich bis zur Marke in den Puffer
yw Wort in den Puffer
Y Zeile in den Puffer
p Einfügen nach Cursor (paste - "einkleben")
Suchen
^A sucht nächstes Vorkommen des Wortes unter Cursor
% platziert Curser auf zugehörige ( ) { } [ ]
Anzahl% platziert Cursor auf Anzahl Prozent der Datei
/text sucht vorwärts text oder regulären Ausdruck
?text sucht rückwärts text oder regulären Ausdruck
* sucht das Wort unter dem Cursor
Wiederholung
. (Punkt) wiederholt letztes Kommando
n letzte Suche wiederholen
N letzte Suche in umgekehrter Richtung
Rückgängig
u undo, der vi kann nur die letzte Änderung rückgängig machen (d.h. uu stellt die letzte Änderung wieder her), der vim kann im Prinzip beliebig viele Änderungen rückgängig machen
^r (crtl+r) redo (nur vim) macht das letzte undo bzw. die letzten undos wieder rückgängig
Sonstige Kommandos
^G zeigt Dateistatus und Zeilennummer
^L erneuert Bildschirm
Bereich! führt angegebenen Bereich einem Filter zu, der anschließend eingegeben werden muss

Änderungsmodus

Eingegebener Text wird eingefügt (bei i, a,...) bzw. ersetzt markierten Bereich (c,...), löschen mit Backspace in der aktuellen Zeile möglich (nur eben eingegebener Text).
Der Änderungsmodus wird mit der ESC-Taste verlassen.
^v (ctrl+v) stellt sicher, dass das nächste Zeichen normal eingegeben wird (z.B. wird bei TAB normalerweise nicht das Tabulator-Zeichen eingefügt sondern so viele Leerzeichen als nötig, will man jedoch das TAB-Zeichen einfügen, muss man ^vTAB drücken).

Ex-Befehle (Colon mode)

:[Zeile][,Zeile]Befehl Argumente
Der Bereich Zeile,Zeile bezeichnet Anfangszeile und Endzeile. Ein . (Punkt) bedeutet aktuelle Zeile, $ die letzte Zeile. Wurde vorher ein Bereich mit v ausgewählt, dann wird automatisch ein Bereich eingefügt: '<,'> (die Marke '< bezeichnet den Anfang und '> das Ende eines markierten Bereichs). % ist die Kurzform von 1,$.
:x Speichern und Ende
:w write, speichern
:w datei Speichern in Datei (write), wurde vorher ein Bereich markiert, so wird dieser Bereich in die datei geschrieben.
:r datei Einfügen von Datei (read)
:q Quit (schließen eines Fensters)
:split [datei] weiteres Fenster (mit datei öffnen)
Suchen und ersetzen
:s/suchtext/ersatztext/[g]
Ersetzen von suchtext durch ersatztext. Wird g (die eckigen Klammern bezeichnen "optional") angegeben, dann wird auch mehrfaches Vorkommen pro Zeile ersetzt. suchtext kann ein regulärer Ausdruck sein.
Wenn kein Bereich angegeben wird, dann wird die Ersetzung nur in der aktuellen zeile durchgeführt. Wird ein Bereich markiert, so wird nur in diesem Bereich ersetzt. Es können auch Zeilennummern angegeben werden:
:.,$s/i++/j++/g ersetze alle i++ durch j++ von der aktuellen Zeile bis zum
Ende der Datei.
Setzen von Modi
:se tabstop=3 Tabulatorweite
:se shiftwidth=3 Weite für > und <
:se ai oder :set autoindent automatisches Einrücken
:se et oder :set expandtab Tabulator wird durch Leerzeichen ersetzt (dies sollte eingestellt werden!)
:syntax on Highlighting von Sourcen
Abkürzungen
:ab lhs rhs Definieren einer Abkürzung lhs (left hand side) für rhs (right hand side), Abkürzungen werden expandiert, sobald ESC, Enter oder die Leertaste gedrückt wird.
:ab listet alle Abkürzungen auf.
:unab lhs löscht die Abkürzung lhs.
:help abbreviate Hilfe zu den Abkürzungen.
Konfigurationsdatei .vimrc
In dieser Datei können beliebige Ex-Befehle stehen. Diese Datei wird beim Starten von vim ausgeführt. Weitere Konfigurationsmöglichkeiten sind in der Dokumentation (:help) beschrieben. So können Abkürzungen definiert werden, Funktionstasten belegt werden und in Abhängigkeit eines Dateityps Konfigurationsdateien ausgeführt werden.
reguläre Ausdrücke
Reguläre Ausdrücke werden immer wieder benötigt. Der vim erlaubt es reguläre Ausdrücke zu beim Suchen. Das Programm grep erlaubt reguläre Ausdrücke. Reguläre Ausdrücke ermöglichen es Suchmuster anzugeben. Dabei gibt es viel mehr Möglichkeiten als bei den Shell-Suchmustern. Es folgen beispielhaft die wichtigsten Ausdrücke:
\. (Punkt) steht für ein beliebiges Zeichen
[aeiou] ein Selbstlaut klein geschrieben
[A-Z] alle Großbuchstaben
[^0-9] alles außer Ziffern
cdrom\|floppy alle Vorkommnisse der Worte cdrom oder floppy
a\+ mindestens ein a (a, aa, aaa, aaaa, ...)
.* keines, ein oder mehrere beliebige Zeichen (der * braucht
keinen
\)
\(ausdruck\)+ das Muster ausdruck muss mindestens einmal
vorkommen
ausdruck{von,bis} ausdruck muss mindestens von mal und höchstens
bis mal vorkommen.
ausdruck{n} ausdruck muss genau n mal vorkommen.
^ausdruck ausdruck muss am Zeilenanfang stehen.
Ausdruck$ ausdruck muss am Zeilenende stehen.
Die Operatoren \+ und * sind "gefräßig", d.h. sie nehmen soviel als möglich, u.U. bis zum Ende eine Zeile. Der Ausdruck a.*h passt auf ah, ahh, abh, abhcdh.
Beispiele:
[0-9A-Fa-f]+ erkennt Hexadezimalzahlen, z.B. 123, abc, F000 usw.
\(un\)*stable erkennt stable, unstable, ununstable,
unununstable etc.
\(un\)\{-,1}stable erkennt stable und unstable
int [a-z]\+(.*); passt auf alle Prototypen von int-Funktionen, die nur
Kleinbuchstaben im Namen haben.

Tipps

Wenn man nicht weiß, in welchem Modus sich der vi bzw. vim gerade befindet, drückt man am besten die ESC-Taste, dann ist man sicher im Befehlsmodus.
Generell ist zu empfehlen, :help tutor zu machen.
Mit :version erhält man Informationen zur Variable $VIM .
Der vi bzw. vim speichert regelmäßig gemachte Änderungen in eine Datei, die mit . (Punkt) beginnt und mit .swp (oder .swb, .swc usw.) endet. Dazwischen befindet sich der Name der editierten Datei (Aufruf vim hello.c, Sicherungsdatei .hello.swp). Beim Speichern und Beenden wird diese Datei gelöscht. Wird der vi bzw. vim gewaltsam terminiert (Stromausfall, killall -KILL vim, schließen des Terminals, in dem der vim läuft o.ä.), dann wird diese Sicherungsdatei nicht gelöscht. Darin sind im Allgemeinen fast alle Änderungen gespeichert.
Wird nach dem "Absturz" der vim wieder mit der vorigen Datei gestartet, so gibt er die Information aus, dass es eben diese Sicherungsdatei gibt und wie man die letzten Änderungen wiederherstellt. Das funktioniert normalerweise mit vim -r datei (-r wie recover). Wenn man dann alles geprüft hat, dann speichert man die Datei. Danach muss man die Sicherungsdatei löschen, da sonst wieder beim Starten von vim die Information angezeigt wird.
vim ist ein konfigurierbarer Editor, er hat eine eigene Programmiersprache eingebaut. Es gibt für viele Aufgaben fertige Scripts im Internet (http://www.vim.org ist ein guter Einstiegspunkt). Solche Scripts werden automatisch geladen, wenn sie sich im Verzeichnis ~/.vim/plugin befinden.

Labels: ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]