Quelle1) Vim ist ein vielseitiger Editor, der sich über Makros erweitern läßt. Er bietet /SyntaxHighlighting und eine grafische Oberfläche basierend auf GTK: gvim.
Der Vim ist ein Klon des original vi.
Homepage: http://www.vim.org/
Lizenz: Vim-Lizenz
Es gibt auch ein recht gutes Online-Buch (en) im PDF-Format über Vim, siehe dort auch insbesondere die Programmiertipps ab S.67.
Die KDE-Version hieß Kvim, war aber meistens buggy, und wird auch schon einige Jahre nicht mehr weiterentwickelt. Die Entwickler stecken die Arbeit jetzt in ein Projekt namens Kyzis. Ansonsten kann man aber die grafische GTK-Oberfläche auch unter KDE verwenden, diese heißt gvim.
«TableOfContents»
* Aufruf:
vim datei.txt
«FootNote(auf Systemen wo vim als default installiert ist, kann auch nur „vi“ benutzt werden)»* Moduswechsel im Editiermodus:
i
- Insert-Modus (Texteinfüge-Modus) anschalten. Wichtig: vorher keinen Text eingeben!<Esc>
- Insert- oder Replace-Modus verlassen, zurück in Kommandomodus* im Kommandomodus:
:w
- speichern:q
- beenden (wenn man nichts geändert bzw. bereits gespeichert hat):q!
- beenden ohne speichern, Änderungen verwerfenSo, soviel zum Überlebensnotwendigen mit Vim.
* Aufruf:
vim +123 buggyprogram.c
, um direkt zu Zeile 123 zu springen* im Kommandomodus:
u
- Undo. Letzte Änderung zurücknehmen.R
- Replace-Modus (Überschreib-Modus) anschalten.P
- Textpuffer vor aktueller Zeile einfügenp
- Textpuffer nach aktueller Zeile einfügenG
- An das Ende der aktuellen Datei springengg
- An den Anfang der aktuellen Datei springennG
oder `ngg`- Gehe zur Zeile n<Strg-w> v
- Fenster vertikal teilen<Strg-w> w
- Cursor in das nächste Fenster<Strg-w> W
- Cursor in das vorherige Fenster/<RegExp>
vorwärts suchen?<RegExp>
rückwärts suchen* Ex-Befehle
:split
- Fenster horizontal teilen:vsplit
- Fenster vertikal teilen:help
- öffnet die Hilfe:help <Befehl>
- öffnet die Hilfe zu <Befehl>:help holy-grail
- zeigt alle Befehle an, die mit einem Doppelpunkt beginnen:x
- speichern und beenden:123
- auf Zeile 123 springen:$
oder G
- an das Ende der Datei springen:%s/<RegExp>/<String>/g
im gesamten Text suchen und ersetzen :s/<RegExp>/<String>/
in der aktuellen Zeile suchen und bei der ersten Übereinstimmung ersetzen:s/<RegExp>/<String>/g
in der aktuellen Zeile suchen und bei allen Übereinstimmungen ersetzenGenerell kann allen Befehlen ein Bereich (range) vorangestellt werden.
* dd
Löschen der aktuellen Zeile
* yy
Aktuelle Zeile in den Kopierpuffer bringen
* 123G
In Zeile 123 springen
* Einrücken (Indenting) oder Ausrücken (Dedenting) von Blöcken:
* ggg?G
Ein gg springt zum Kopf der Datei. Von da bis zum Ende wird die Datei mit Rot13 verschlüsselt. ;)
* :1,$ s/Hallo/Hello/g
Zeile 1 bis letzte Zeile: Hallo durch Hello ersetzen, beliebig oft je Zeile. * "%" ist mit "1,$" gleichbedeutend
* :'a,'b s/Hallo/Hello/g
von Marke a bis Marke b Hallo durch Hello ersetzen
* .,.+3 s/1/2/
Aktuelle Zeile bis 3 Zeilen weiter: 1 durch 2 ersetzen, nur das erste mal in der Zeile.
* /^Name:/ s/Robby/Robert/g
In jeder Zeile, in der am Anfang Name: steht, Robby durch Robert ersetzen, auch mehrmals.
Mit vimtutor
bekommt man eine Einführung in und im Vim.
* Zum Einschalten `:syntax on` im Editor oder `syntax on` in die `.vimrc`. * Syntax auswählen über `:su $VIMRUNTIME/syntax/html.vim` als Beispiel für HTML. * Eigene Syntax Files kommen in ~/.vim/syntax/ . * Ein Beispiel für selbstgebautes Syntax-Highlighting findet sich auf ExternalEdit.
Kann man über die Optionen `autoindent, smartindent` und `cindent` steuern.
Wer etwa will das Tabs nur 4 Leerzeichen breit angezeigt werden sollte `set tabstop=4` setzen und evtl. auch noch `set shiftwidth=4` setzten damit auch im falle von `cindent` etc. richtig eingerückt wird.
Wenn man per X11 Copy&Paste Inhalte z.B. aus nem Web-Browser übernehmen will, sollte man autoindent vorher abschalten per `:set noai` - dann muss man nicht das ansonsten entstehende „Treppenmuster“ entfernen.
1. 'u
'
Die undo Funktion ist immens wichtig. Schön ist auch, daß vim im Gegensatz zu vi mehr als eine Änderung rückgängig machen kann.
1. '<STRG-p>
' bzw. '<STRG-n>
' (also STRG-Taste und p oder n gleichzeitig)
Ich editiere vor allem C/C++-Code und oft weiß ich 10 Zeilen später nicht mehr, ob ich die Variable jetzt vrglStr, vrglstring, vrgl_string oder vrgl_String genannt habe. Also im Code die Zeilen zurück, nachschauen usw.? NEIN, einfacher: Ich tippe vrgl (soweit kann ich mich noch erinnern ) und dann <STRG-p> - jetzt sucht Vim rückwärts nach Worten, die mit vrgl anfangen. Der erste Treffer wird angezeigt und ich kann einfach weiter schreiben. Würde es noch mehr Wörter geben, die mit vrgl anfangen, werden die der Reihenfolge nach angezeigt, ich muss nur nochmal <STRG-p> drücken. Das p steht für Previous. Wer das ganze mit <STRG-n> ausprobiert, sieht, dass n für Next steht, also einfach die Suchrichtung umgekehrt ist.
1. '#
' und '*
'
Wenn der Cursor über einem Wort steht und Du drückst #, dann heißt das für den Vim „suche rückwärts nach diesem Wort und bringe den Cursor dort hin“. * macht das gleiche, nur ist hier die Suchrichtung vorwärts.
1. '%
'
Steht der Cursor über einer Klammer, springt % zu der dazugehörigen öffnenden bzw. schließenden Klammer. Das funktioniert auch mit dem vi. Mit folgendem Skript http://www.vim.org/scripts/script.php?script_id=39 funktioniert das auch mit Sprachen, die andere Kontrollstrukturen haben, wie etwa TeX oder XML. Befindet man sich also über einem Tag und drückt % springt vim zum entsprechenden Gegenstück.
1. ':%s/windows/linux/g
'
Suchfunktion: windows suchen, durch linux ersetzen, g steht für alle Vorkommen in einer Zeile, % für den gesamten Text
1. 'v
', 'V
' und 'ctrl-V
'
Zeichen, Zeilen und Blockweises visuelles Markieren. Nach dem Markieren kann mit I Text eingefügt werden. c ändert den Markierten Text, x oder d löscht ihn und > und < rücken ihn ein.
1. '=
'
Dient der korrekten Ausrichtung von Programm Texten. Einfach mal ==% oder ==== ausprobieren.
1. ':noh
'
Schaltet die Hervorhebung von Suchergebnissen ab, die bei kurzen Suchstrings sehr irritierend werden kann. Alternativ kann man auch nach einer definitiv nicht vorhandenen Zeichenfolge suchen (z.B. '/cdnnsdcjsd
').
Das sind die Konfigurationsdateien für den Vim. Beim Start des Gvim wird zusätzlich auch die ~/.gvimrc gesourced. Sind keine rc's im Homeverzeichnis, so werden die defaults durchlaufen. Bei Debian sind die in /etc/vim ansonsten im Installationsverszeichnis von Vim, das normalerweise /usr/share/vim ist. In der ~/.vimrc (hier ein Beispiel) und ~/.gvimrc lassen sich jetzt tolle Sache unterbringen, wie z.B. das bevorzugte Color-Scheme usw.
Vim unterstützt Plugins und zwar systemweit oder benutzerspezifisch. Es gibt davon inzwischen über 1200, siehe http://www.vim.org. Plugins gibts zu den verscheidensten Themen: CVS-Tools, Projekt-Verwaltung, Kalender, schon mal mit Vim Tetris gespielt?
Ftplugin bedeutet File-Typ spezifisches Plugin. So gibt es ftplugins die z.B. die Syntax von HTML oder Python oder usw. besonders unterstützen.
Es ist nicht schwer, sich einfache Plugins selber zu schreiben, z.B. um sich zusätzliche Menubars selber einzubinden.
Wer unter vim mit Tabellen arbeitet, wird Bedarf an 'Sortierfunktionen
' haben.
Das 'alphabetische Sortieren
' von Spalten beherrscht folgendes Script:
Es kann sogar 'Datumseinträge sortieren
'.
Das Sortieren von Spalten 'nach der Größe von Zahlen
' kann es 'nicht
'.
` → Eine diesbezügliche Ergänzung wäre toll. ;)`
Da einige Webbrowser wie z. B. 'w3m
' das Einbinden von Editoren beherrschen, kann VIM natürlich auch „wiki“.
Ein kleines Skript für Wiki-Syntax gibt's ebenfalls.
* Auch mit Mozilla und Mozex gut nutzbar (Anleitung) . :)
Das Hilfesystem von Vim ist sehr leicht (natürlich wieder benutzerspezifisch) zu erweitern.
* VIM Referenzkarte * Kurzeinführung in vim * Vi auf schwäbisch * Mit dem Aufbau von VIM-Makros beschäftigt sich Linux-Magazin. * kleine und gut verständliche Einführung in vi, aber auch für vim gültig: http://www.tripbit.org/articles/Der_vi_Editor_und_seine_Handhabung.htm * Folding, also das Zusammenfalten von Textpassagen bspw. anhand von geschweiften Klammern in C++, um Methoden auszublenden etc.: http://www.pl-berichte.de/t_programme/vim_fold.html * eine „Spickzettel“-Methode um den vi zu erlernen gibt es auch: http://gentoo.de/doc/de/vi-guide.xml
gvim funktioniert erst nach apt-get install vim-gtk
.
Allerdings schließt dies beispielsweise das Paket vim-perl (Vi IMproved mit Perl-Scripting-support) aus.
Problem: Navigieren in langen Zeilen: Solange ich eine Zeile nicht mit Return abschließe, wird die ggf. auf dem Bildschirm automatisch umgebrochen, geht also z.B. über zwei Bildschirmzeilen. Die Tasten Pfeil-rauf, Pfeil-runter, Pos1 und Ende beziehen sich nun nicht auf die Bildschirmzeilen, sondern auf die tatsächlichen Zeilen (bis zum Zeilenende-Zeichen). Wie kann ich denn bequem die Bildschirmzeilen navigieren? Wie komme ich z.B. von der Bildschirmzeile 2 direkt zu dem auf dem Bildschirm darüberliegenden Zeichen? Bei „normalen“ Textverarbeitungen ja mit Pfeil-rauf. Und bei vim?
Um sich in Bildschirmzeilen zu bewegen, kann man im Normalmodus
* gj
für abwärts und
* gk
für aufwärts benutzen.
Bei Bedarf kann man auch die Cursortasten entsprechend anpassen. (Siehe auch: Vim FAQ, Abschnitt 9.4)
Cream als einfache Konfiguration für Vim verwenden.
Pida ist eine grafische IDE, die als Editor einen VIM (alternativ auch Cream) eingebettet hat - und bietet viele Zusatzfeatures z.B. zum Thema Versionskontrolle etc. Pida IDE Website
cscope ist ein interaktives Programm zum navigieren im Quellcode. Als erstes wird im Quellcode-Verzeichnis mit dem Befehl cscope-indexer eine Datenbank (cscope.out) angelegt. Hier werden die Informationen der Codeanalyse gespeichert.
user@host:/tmp/codetest$ tree
.
`– src
|– main.c
`– test.c
user@host:/tmp/codetest$ cscope-indexer -r
user@host:/tmp/codetest$ tree
.
|– cscope.files
|– cscope.out
`– src
|– main.c
`– test.c
Nun startet wir vim im Verzeichnis in der sich die Datenbank befindet (/tmp/codetest).
user@host:/tmp/codetest$ vim
Zum erstellen einer Datenbankverbindung wird folgender Befehl eingegeben:
:cscope add .
Mit show lassen sich die Datenbankverbindungen anzeigen:
:cscope show
Nun wollen wir die main-Funktion suchen, dies wird mit folgendem Befehl gemacht:
:cscope find g main
vim öffnet die Datei in der sich die main-Funktion befindet und springt zu der richtigen Zeile.
Die Hilfe wird mit :cscope help angezeigt:
cscope Befehle:
add : Eine neue Datenbank hinzufügen (Verwendung: add file|dir [pre-path] [flags])
find : Muster suchen (Verwendung: find c|d|e|f|g|i|s|t name)
c: Find functions calling this function
d: Find functions called by this function
e: Find this egrep pattern
f: Find this file
g: Find this definition
i: Find files #including this file
s: Find this C symbol
t: Find assignments to
help : diese Nachricht anzeigen (Verwendung: help)
kill : Verbindung abbrechen (Verwendung: kill #)
reset: Verbindungen reinitialisieren (Verwendung: reset)
show : Verbindungen anzeigen (Verwendung: show)
##http://www.idroplast.com/vim.jpg
Das Kommandozeichen ! bedeutet soviel wie force - tippt mal :help! ein :)
auf Systemen wo vim als default installiert ist, kann auch nur „vi“ benutzt werden (1)