Vim für Programmierer 2007-04-09, Easterhegg 2007, Hamburg ==================================== C-Programme =========== Den Compiler und dessen Fehlermeldungen einstellen :compiler gcc :set makeprg=gcc\ -o\ %<\ % (Standard: `make') Fehler-Fenster öffnen: :copen [:lopen] Der Write-Compile-Test-Cycle: :make Fehler anzeigen und direkt hinspringen: :clist :colder :cc [n] :cnewer :cfirst :cnext :clast :cprev Include-Dateien anzeigen: :checkpath[!] Innerhalb von Programmen navigieren: Nach der Definition der Funktion/Variable unter dem Cursor suchen bzw. springen: suchen springen [i [I [ [d [D Ctrl-W 5[ (5. Treffer) zurück: Ctrl-o gd - go to local definition gD - go to global definition gf - go to file gF - go to file:23 Nach dem Wort unter dem Cursor suchen: * und # Passende Klammer anzeigen: % Markier-Modus ============= Modus starten: v zeichenweise V zeilenweise Ctrl-V blockweise Einfügen/Ersetzen: I Vor dem Block einfügen A Nach dem Block einfügen rX Jedes Zeichen durch "X" ersetzen s "substitute": Markiertes Löschen und Insert Mode starten Text-Objekte iw/aw inner/outer word is/as inner/outer sentence ip/ap inner/outer paragraph it/at inner/outer HTML tag iB/aB inner/outer Block { ... } i'/a' inner/outer single quoted block i"/a" inner/outer double quoted block Editieren von Programmen ======================== Automatisches Neu-Einrücken: == bzw. ={Bewegung} == Aktuelle Zeile einrücken =iB Inneren Block einrücken =iP Absatz neu einrücken V...= Markierten Bereich neu einrücken gg=G Komplette Datei neu einrücken Manuelles Ein-/Ausrücken: >> >{Bewegung} bzw. << <{Bewegung} >> Aktuelle Zeile einmal einrücken << Aktuelle Zeile einmal ausrücken V...<< Visuell markierten Bereich einmal ausrücken (Tipp: gv) >ip Den aktuellen Absatz einmal einrücken Tab/De-Tab im Insert Mode: Ctrl-T bzw. Ctrl-D Optionen: expandtab Ein Tab erzeugt statt eines Tab-Zeichens die entsprechende Anzahl an Leerzeichen shiftwidth Bestimmt, wie viele Leerzeichen eine Einrückung ist (davon hängt dann ab, wie viel >>, Ctrl-T, die Auto-Einrückung, etc. einrückt) tabstop Bestimmt, wie groß die Maximalbreite eines Tabs ist. Alle Tabs/Spaces ersetzen: Abhängig davon, ob "expandtab" gesetzt ist, werden Tabs durch Spaces bzw. umgekehrt ersetzt. (Im letzteren Fall muss ein Ausrufezeichen hinzugefügt werden!) :retab[!] Completion Ctrl-N bzw. Ctrl-P Versucht, das angefangene Wort zu vervollständigen. Je nach Konfiguration werden dabei alle anderen Buffer, Wörterbücher und Tag-Dateien durchsucht. Ctrl-X Ctrl-F Dateinamen-Completion set pumheight=7 Seit Vim7: Menü, in dem man auch die vorherigen bzw. nachfolgenden Treffer sehen kann (Navi- gation nach wie vor mit ^N und ^P). ctags ===== http://ctags.sourceforge.net/ - the ctags utility ctags erlaubt das "Indizieren" ganzer Programme. Mit Hilfe des Index kann man direkt zu der Definition von Funktionen oder Variablen springen. Aufruf: ctags -R . # bildet den Index, rekursiv Vim: :set tags=/home/user/project/tags,/tmp/tags (per Standard schon gesetzt auf "./tags,tags") Einem Tag folgen: Ctrl-] bzw. Ctrl-5 (in xterm&co) Zurückspringen: Ctrl-T bzw. Ctrl-O Tagstack/Springen: :tags bzw. :[s]tag function Folding ("wegfalten" von Code) ============================== :set foldmethod={manual,indent,marker,syntax} zf - create fold za - toggle open/closed state zA - ... recursively zd - delete a fold zD - ... recursively zE - eleminate folds zi - toggle "foldenable"