Eine IDE installieren und nutzen kann jeder, aber vim als IDE nutzen? Ich zeige ein paar Einstellungen, Shortcuts und Funktionen von vim, die es zu einer IDE machen. Dabei werde ich keine Plugins und keine Magie nutzen, denn vim kann bereits alles nötige.

Das sind die Funktionen, die ich zeige und um die ich die Standard Konfiguration erweitern werde:

Bedienung, die vim schon kann: Standard zeug: Öffnen, speichern, schließen, … Dateiexplorer Tabs öffnen und nutzen Bildschirm teilen

Navigation, die vim schon kann: Suchen, ersetzen, Springen (z.B. zum nächsten Vorkommnis, zur Definition, …)

Software bauen (build & run) Debugging

Mit Anpassungen an vim: Zeilennummern, Syntax highlighting, Cursor-Zeile hervorheben, … Autovervollständigung mit drop-down Menü



Mehr Anpassungen sind das auch nicht.

Grundlegende Bedienung von vim

Das mit dem Modi sollte man schon drauf haben. Hier auch nur ganz kurz das Wichtigste:

Datei öffnen (ohne Tabs): :e /path/to/file

Datei speichern: :w

Datei schließen: :q und wenn du nicht vorher speichern möchtest: :q!

und wenn du nicht vorher speichern möchtest: Hilfe anschauen: :help Befehl

Eingebauter Dateiexplorer

Vim hat einen eigenen grafischen Dateiexplorer. Diesen kann man mit :Explore (man achte auf das große E ) – oder kurz :Ex – öffnen und darin navigieren. Entweder man wählt dann eine Datei, die geöffnet wird oder man schließt ihn mit :q .

Ein paar weitere Arten von :Explore :

:Sexplore / :Sex Teilt den Bildschirm horizontal

/ Teilt den Bildschirm horizontal :Lexplore / :Lex Teilt vertikal und zeigt den Explorer links an

/ Teilt vertikal und zeigt den Explorer links an :Texplore / :Tex Erstellt einen neuen Tab in dem die Datei geöffnet wird

Tabs

Auch Tabs bringt vim bereits mit:

:tabnew öffnen einen neuen Tab

öffnen einen neuen Tab :tabfind /path/to/file öffnet die angegebene Datei in einem neuen Tab

öffnet die angegebene Datei in einem neuen Tab :tabclose schließt den Tab

Mit STRG+Bild-rauf und STRG+Bild-runter kann man zwischen den Tabs navigieren.

Fenster splitten

Vim bietet eine Möglichkeit den Bildschirm mit :split / :sp horizontal und mit :vsplit / :vs vertikal zu teilen. Die geöffnete Datei wird dann zwei mal dargestellt.

Mit STRG+W STRG+W kann man zwischen den Teilen springen (vim geht die dann der Reihe nach durch).

In Kombination mit Tabs ist dann die aktuelle Tab-Seite geteilt. Andere Tabs sind nicht geteilt.

Suchen und Ersetzen

Unter Linux ist das Schema /Suchbegriff sehr weit verbreitet (z.B. im pager less ). Einfach im Normal-Mode drauf los tippen und mit Enter die Suche starten. Dadurch springt Vim zum ersten Ergebnis und man kann mit n zum nächsten, bzw. mit N zum vorherigen Ergebnis springen.

Ersetzen geht nach einem vergleichbaren Schema vor:

:s/alt/neu/ ersetzt das erste „alt“ in der aktuellen Zeile durch ein „neu“

ersetzt das erste „alt“ in der aktuellen Zeile durch ein „neu“ :s/alt/neu/g ersetzt jedes „alt“ in der aktuellen Zeile durch ein „neu“

ersetzt jedes „alt“ in der aktuellen Zeile durch ein „neu“ :%s/alt/neu/g ersetzt jedes „alt“ in der Datei durch ein „neu“

ersetzt jedes „alt“ in der Datei durch ein „neu“ :%s/alt/neu/gc ersetzt jedes „alt“ in der Datei durch ein „neu“, fragt aber bei jedem Vorkommnis nach

Springen

Neben dem klassischen Suchen gibt es leichtgewichtige Varianten zum Finden von gewissen Vorkommnissen oder Stellen in der Datei:

* nimmt das Wort unterm Cursor und springt zum nächsten Vorkommnis

nimmt das Wort unterm Cursor und springt zum nächsten Vorkommnis # nimmt das Wort unterm Cursor und springt zum vorherigen Vorkommnis

nimmt das Wort unterm Cursor und springt zum vorherigen Vorkommnis gD nimmt das Wort unterm Cursor und springt zum ersten Vorkommnis in der Datei

(merke: gD = g oto D efinition)

nimmt das Wort unterm Cursor und springt zum ersten Vorkommnis in der Datei (merke: = oto efinition) gg springt zum Dateianfang

springt zum Dateianfang G springt zum Dateiende

springt zum Dateiende $ springt zum Zeilenende

springt zum Zeilenende ^ / _ springt zum ersten Zeichen in der Zeile, was kein Leerzeichen ist

/ springt zum ersten Zeichen in der Zeile, was kein Leerzeichen ist 0 springt zum absoluten Zeilenanfang

Bauen, ausführen und Debuggen

Da ich keine Plugins in diesem Artikel nutzen möchte, werde ich lediglich Tricks zeigen, die das Nutzen von z.B. gdb einfacher machen.

Man kann aus vim heraus Bash-Befehle ausführen und somit z.B. die Anwendung bauen und ausführen. Zum bauen kann man z.B. make starten, was dann so aussieht: :!make

Das ! bringt vim dazu den nächsten Befehl als externes Programm in einer neuen Bash zu starten.

Angenommen aus make purzelt die Datei main heraus, dann kann man mit :!make && ./main direkt bauen uns starten. Es öffnet sich dabei eine Bash in der das alles ausgeführt wird. Neben make kann man eben auch gdb starten. Dazu entsprechend :!gdb eingeben und fertig.

Man sollte vorher speichern und kann das dann z.B. mit make und gdb verbinden: :w | !make && gdb

Die Pipe (also | ) verbindet zwei Befehle (wie && in der shell).

Zuletzt vereinfacht ein Shortcut das ganze noch weiter, so kann ein entsprechender .vimrc -Eintrag so aussehen: nmap <C-D> :w <bar> !make all && gdb<cr>

Dadurch kann man dann mit CTRL+D im Normal-Mode speichern, make aufrufen und danach direkt zu gdb springen.

Tipp:

Mit dem Terminal-Multiplexer screen kann man dann vim und gdb in einem Terminalfenster direkt nebeneinander auf haben. Praktisch, wenn man rein im Terminal entwickelt.

Anpassungen an Vim

Wie oben schon angedeutet, kann man (unter Anderem) in der Datei .vimrc (im home-Ordner) Anpassungen an vim vornehmen. Hier meine Standard-vim-IDE-Einstellungen:

syntax enable Aktiviert Syntax Highlighting. :set tabstop=4 Setzt Tab-Breite auf vier Leerzeichen (Standard sind acht). :set number Zeigt Zeilennummern an. :set wildmenu Zeigt ein Menü für Vorschläge bei Befehlen an. Das tritt z.B. auf wenn man mit :tabfind und mehrmaligen TAB drücken nach einer Datei sucht. In einem kleinen Menü werden einem dann Vorschläge (also z.B. Dateien) angezeigt. :set cursorline Unterstreicht die Zeile in der der Cursor gerade ist. Praktisch, wenn man etwas sucht und nicht weiß wo der Cursor gerade ist. set colorcolumn=80 Zeigt einen Balken bei der 80-Zeichen-Grenze an. Praktisch, wenn Code-Konventionen nur eine gewisse Anzahl an Zeichen pro Zeile zulassen. imap <C-@> <C-n> Zeigt bei STRG+Leertaste ein Menü für Autovervollständigung an. Funktioniert direkt im Insert-Mode. nmap <C-D> :w <bar> !make all && gdb<cr> Speichert, führt make aus und startet gdb mit STRG+D im Normal-Mode. nmap <C-C> :!bash<cr> Startet eine simple bash mit STRG+C im Normal-Mode. Praktisch, da man so weder einen neuen Terminal-Tab oder gar ein neues Terminal-Fenster braucht, noch vim beenden muss. Mit exit gelangt man zurück.

Fazit

Mit Plugins kann man alles erreichen aber gefühlt 70% kann vim schon direkt und weitere 29% schafft man mit Shortcuts und Einstellungen. Plugins ergänzen dann vielleicht das eine restliche Prozent an Funktionalität. Vielleicht ist dieses eine Prozent das i-Tüpfelchen, aber man sollte sich überlegen, ob man jetzt zig Plugins herunterlädt. Die vorhandenen Hausmittel zu verwenden ist nun mal wesentliche schlanker und macht keine Probleme.

Lasst es mich wissen, wenn ihr weitere vim-IDE-Tricks nutzt 🙂