Plugins¶
Vim kann durch so genannte “Plugins” erweitert werden. Diese können von der Projektseite oder von Github heruntergeladen werden.
Unterschieden wird zwischen allgemeinen Plugins, die nach ihrer Installation
automatisch geladen werden, und “Filetype”-Plugins, die nur geladen werden, wenn
eine Datei des entsprechenden Typs geladen wird. Gewöhnlich erkennt Vim den
Dateityp anhand der Endung, z.B. datei.py
als eine
Python
-Quellcode-Datei. Der Dateityp einer geöffneten Datei kann allerdings
auch manuell mittels set filetype Typ
geändert werden, wobei die
entsprechenden Filetype-Plugins nachgeladen werden.
Vundle: Plugins installieren und verwalten¶
Das Vundle-Plugin
bietet eine sehr empfehlenswerte Methode, eine individuelle Auswahl an Plugins
zu installieren und zu verwalten. Um dieses Plugin zu verwenden, wird zunächst
im Ordner ~/.vim
ein neues Unterverzeichnis namens bundle
angelegt:
mkdir ~/.vim/bundle/
Anschließend gibt man folgende Zeile ein:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Damit ist das Vundle-Plugin installiert. Die Benutzung des Plugins funktioniert
mittels der Konfigurationsdatei ~/.vimrc
. Hier wird an beliebiger Stelle
folgendes eingegeben:
set nocompatible
" Set the runtime path and initialize Vundle:
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" Let Vundle manage itself (required)
Plugin 'gmarik/Vundle.vim'
" Install and use the following Plugins:
Plugin 'vim-scripts/sudo.vim'
Plugin 'scrooloose/nerdcommenter'
" ...
filetype on " Filetype-Erkennung aktivieren
filetype indent on " Syntax-Einrückungen je nach Filetype
filetype plugin on " Filetype-Plugins erlauben
Hierbei muss lediglich beachtet werden, dass die filetype on
-Anweisungen
erst nach den für Vundle relevanten Zeilen eingegeben werden.
Um ein Plugin mittels Vundle zu installieren, genügt es den GitHub-Namen des
Plugins mittels Plugin 'repository/plugin-name'
in die Vundle-Liste
aufzunehmen. Anschließend wird Vim gestartet und :PluginInstall
eingegeben.
Alle noch nicht installierten Plugins werden damit automatisch als eigene
Verzeichnisse in das ~/.vim/bundle
-Verzeichnis installiert.
Mit Vundle ist auch eine weitere Verwaltung der Plugins möglich:
- Um ein Plugin zu deaktivieren, genügt es die entsprechende
Plugin
-Zeile in der~/.vimrc
auszukommentieren und Vim neu zu starten; es werden nämlich bei Verwendung von Vundle nur diejenigen Plugins von Vim geladen, die in der Plugin-Liste enthalten sind. - Soll ein Plugin entfernt werden, so wird es ebenfalls zunächst auskommentiert,
Vim anschließend neu gestartet und
:PluginClean
eingegeben.
Um alle Plugins auf einmal zu aktualisieren, kann man
:PluginInstall!
eingeben. Vundle prüft damit automatisch, ob auf GitHub eine neuere Version des Plugins existiert und installiert diese gegebenenfalls nach.Soll ein Plugin bei einer Aktualisierung mittels
:PluginInstall!
nicht berücksichtigt werden, so kann bei diesem als zusätzliche Option{"pinned, 1}
angegeben werden, beispielsweise:Plugin 'honza/vim-snippets', {'pinned': 1}
Wird ein Plugin auf diese Weise eingebunden, so werden beispielsweise eigene Änderungen durch einen Update nicht überschrieben.
Nahezu jedes Vim-Plugin wird inzwischen entweder vom jeweiligen Entwickler oder
innerhalb des vim-scripts
-Repository auf GitHub gelistet. Bei den folgenden
Beschreibungen der einzelnen Plugins sind daher neben den Beschreibungen auf der
Vim-Projektseite stets auch die entsprechenden GitHub-Repositories verlinkt.
Hilfreiche Erweiterungen¶
Align¶
Das Align-Plugin stellt eine gleichnamige Funktion bereit, mittels derer man visuell markierte Bereiche zu einer übersichtlichen Tabelle ausrichten kann.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/jezcope/vim-align
Als Anwendungsbeispiel sei in einer Textdatei folgende Tabelle enthalten:
# Vorher:
a ; b ; c ; d ; e;
ab; bc; cd; de; ef;
abcd ; bcde ; cdef ; defg ; efgh;
Nach einer visuellen Markierung des Textes und Eingabe von :Align ;
sieht
die Datei so aus:
# Nachher:
a ; b ; c ; d ; e ;
ab ; bc ; cd ; de ; ef ;
abcd ; bcde ; cdef ; defg ; efgh ;
Die :Align
-Funktion akzeptiert jedes beliebige Trennzeichen und kann
entweder global oder mittels :'<,'>Align
auf den aktuell markierten Bereich
angewendet werden. Die Bearbeitung von tabellarischem Text wird so wesentlich
erleichtert. :-)
Buffer-Explorer¶
Das BufferExplorer Plugin bietet – ähnlich wie
:ls
– eine Übersicht über die aktuell geöffneten Buffer. Um einen
bestimmten Buffer in dieser Ansicht auszuwählen, muss man nur mit j
, k
oder ähnlichen Bewegungsbefehlen den Cursor über den gewünschten Dateinamen zu
bewegen und Enter
zu drücken.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/jlanzarotta/bufexplorer
Um schnell auf den Buffer Explorer zugreifen zu können, empfiehlt sich ein entsprechendes Mapping in der Konfigurationsdatei, beispielsweise:
nmap gB :BufExplorer<Return>
Auf diese Weise kann der Buffer-Explorer aus dem Normalmodus heraus schnell mit
gB
gestartet werden. (Der Cursor befindet sich beim Start des Buffer
Explorers über der aktuellen Datei, so dass es bei einem versehentlichen Öffnen
genügt Enter
zu drücken, um zurück zur Ausgangsposition zu gelangen.)
CtrlP¶
Das CtrlP-Plugin
ermöglicht ein sehr effizientes Auswählen von Dateien, ausgehend vom
Verzeichnis, in dem Vim aufgerufen wurde; ebenso können mit CtrlP
zuletzt
verwendete Dateien wieder schnell geöffnet werden.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/kien/ctrlp.vim
Das CtrlP-Plugin wird vom Normalmodus aus mittels Control p
gestartet. Es
erscheint ein Eingabe-Prompt, der mit Esc
wieder beendet werden kann.
Möchte man mit CtrlP eine Datei im Projektverzeichnis oder einem
Unterverzeichnis öffnen, so genügt es nach Drücken von Control p
eine
beliebige Anzahl von Zeichen einzugeben, die im Dateinamen der gesuchten Datei
vorkommen; es muss also nicht ein realer Dateiname eingegeben werden, sondern es
wird vielmehr eine “Fuzzy”-Suche gestartet. CtrlP listet automatisch alle
zutreffenden Dateien in einem temporären Fenster auf, in dem mittels Ctrl j
und Ctrl k
navigiert werden kann. Drückt man Enter
, so wird die
ausgewählte Datei geöffnet.
Nach Drücken von Control p
kann bei Bedarf mittels Control f
(oder
Control b
) zwischen den möglichen Suchoptionen gewechselt werden (Dateien,
Buffer, zuletzt verwendete Dateien, oder alle zusammen).
Eregex¶
Das Eregex-Plugin <http://www.vim.org/scripts/script.php?script_id=3282> ermöglicht es, in Vim für das Suchen und Ersetzen Perl-kompatible reguläre Ausdrücke zu verwenden.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/othree/eregex.vim
Eine gute Übersicht über reguläre Ausdrücke in Perl-Syntax findet sich beispielsweise hier
Nerd-Commenter¶
Das NerdCommenter-Plugin ermöglicht es einzelne Zeilen oder (in Verbindung mit visuellen Markierungen) ganze Code-Abschnitte auszukommentieren. Dabei wird automatisch für jeden Filetype das passende Kommentarzeichen gewählt.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/scrooloose/nerdcommenter
Für die Benutzung des NerdCommenter-Plugins gibt es folgende Tastenkombinationen:
\cc |
Kommentiere (visuell) markierte Zeilen aus | (comment) |
\cu |
Kommentiere (visuell) markierte Zeilen ein | (undo-comment) |
\c Leertaste |
Kommentiere wechselhaft ein oder aus (kann häufig \cc und \cu
ersetzen) |
In der Datei ~/.vim/bundle/nerdcommenter/plugin/NERD_commenter.vim
können
Kommentarzeichen für die verschiedenen Dateitypen einfach angepasst und/oder
ergänzt werden. Dazu sucht man mit der Vim-Suche nach der gewünschten Endung,
beispielsweise tex
, und gibt wie bei den übrigen Einträgen das gewünschte
Kommentarzeichen an.
Renamer¶
Das Renamer Plugin ermöglicht ein gleichzeitiges, fein steuerbares Umbenennen mehrerer Dateien mittels Vim.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/qpkorr/vim-renamer
In einem neuen Vim-Buffer kann mittels :Ren
der Inhalt des aktuellen
Verzeichnisses eingelesen werden. In der so erstellten Liste ist das Suchen und
Ersetzen von Text (inklusive regulärer Ausdrücke) wie üblich möglich; mit
Enter
kann zudem in das Verzeichnis unter dem Cursor gewechselt werden.
Um die Dateien eines Verzeichnisses unmittelbar aus der Shell heraus mit Vim
umzubenennen, kann vim -c Ren
aufgerufen werden; hierfür kann wiederum in
der ~/.bashrc
ein alias definiert werden, beispielsweise alias vren='vim
-c Ren'
.
Beim Umbenennen ist lediglich zu beachten, dass die Reihenfolge der Dateien nicht geändert werden darf und die Liste nach dem Umbenennen genauso viel Zeilen beinhalten muss wie zu Beginn (da jede Zeile genau einen Dateinamen beinhaltet).
Ist man mit dem Umbenennen fertig, gibt man nochmals :Ren
ein, und die
Dateien im jeweiligen Verzeichnis werden entsprechend umbenannt. :-)
Snipmate¶
Das Snipmate Plugin
erlaubt es auf einfache Weise für verschiedene Dateitypen Schlüsselwörter zu
definieren, die, wenn sie im Insert-Modus eingegeben werden, mittels Drücken
einer Auslöse-Taste (“Trigger”, normalerweise Tab
) durch ein vorgegebenes
Template ersetzt werden.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/garbas/vim-snipmate
Die einzelnen Snippets werden im Ordner ~/.vim/snippets
in verschiedenen,
nach dem Filetype benannten Dateien definiert, beispielsweise rst.snippets
für RestructuredText-Snippets.
Die Definition von Snippets erfolgt nach folgender Syntax:
snippet kürzel
template
Beispiel: (Ausschnitt aus der Datei ~/.vim/snippets/rst.snippets
)
snippet toc
.. toctree::
:maxdepth: 2
${1}
Hat man ein Snippet wie im obigen Beispiel definiert und befindet sich in einer
beliebigen rst
-Datei, so genügt im Insert-Modus die Eingabe von toc
und
das Drücken der Trigger-Taste, und es wird anstelle von toc
das entsprechend
definierte toctree
-Template an der aktuellen Stelle in die Datei eingefügt.
Der Cursor befindet sich anschließend an der mit ${1}
festgelegten
Position.[1]
Das Snipmate-Plugin zeichnet sich durch einen einfachen Aufbau aus, der bereits eine große Arbeitserleichterung mit sich bringt. Möchte man allerdings einen Schritt weiter gehen und unter anderem in Snippets reguläre Ausdrücke verwenden oder selbst definierte Python-Funktionen auslösen können, so sollte man unbedingt das UltiSnips-Plugin als gelungene Weiterentwicklung von Snipmate verwenden.
Sudo¶
Das Sudo Plugin ermöglicht es, sich auch nachträglich mit SuperUser-Rechten ausstatten. Nützlich ist das, wenn man Systemdateien verändert, und es einem erst beim Speichern auffällt, dass man eigentlich gar keine Schreibrechte besitzt.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/vim-scripts/sudo.vim
Zur Verwendung des Sudo-Plugins gibt es folgende Funktionen für die Vim-Kommandozeile:
:SudoWrite Datei |
Speichere Datei mit Root-Rechten (:SudoWrite % speichert so die
aktuelle Datei ab) |
:SudoRead Datei |
Lese Datei mit Root-Rechten |
:e sudo:/path/Datei |
Öffne Datei mit Root-Rechten |
Praktisch ist auch eine Abkürzung in der Konfigurationsdatei ~/.vimrc
:
cabbrev sw SudoWrite% " Aktuellen Buffer mit Sudo-Rechten schreiben
SuperTab¶
Das SuperTab-Plugin
bietet eine einfach Möglichkeit, im Einfüge-Modus mittels Tab
das bis zum
Cursor reichende Wort zu vervollständigen (ähnlich wie durch Verwendung von
Control x
).
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/ervandew/supertab
SuperTab bietet eine Möglichkeit, die Vervollständigung auf den Kontext bezogen
durchzuführen. Gibt man beispielsweise einen Pfadnamen ein, so versucht SuperTab
diesen zu vervollständigen; schlägt dies fehl, so wird versucht eine
Vervollständigung anhand des bisher in dem aktuell geöffneten (oder weiteren)
geöffneten Buffern zu bewirken. Hierzu muss folgender Eintrag in die
~/.vimrc
aufgenommen werden:
let g:SuperTabDefaultCompletionType = "context"
Gibt es mehrere Möglichkeiten zur Vervollständigung, so wird ein kleines
Popup-Fenster, wobei die einzelnen Möglichkeiten mit Control n
, Control
p
oder wiederum mit Tab
durchlaufen werden können. Der aktuelle
Vervollständigungsvorschlag wird von SuperTab automatisch eingeblendet; drückt
man die Leertaste oder fährt man fort zu schreiben, so wird der Vorschlag
übernommen.
Hinweis: Bei Verwendung von SuperTab bewirkt die Tab-Taste nur noch ein Einfügen eines Tabulator-Zeichens als Abstandmarker, wenn dieses am Zeilenanfang steht oder wenn ein vor dem Cursor (mindestens) ein Leerzeichen steht; andernfalls wird durch die SuperTab-Funktion das Wort vor der aktuellen Position ergänzt.
Tagbar¶
Das Tagbar-Plugin
bietet eine Art Inhaltsverzeichnis für Quellcode. Es nutzt das externe Programm
exuberant ctags
, um aus den aktuell geöffneten Dateien eine Übersicht an
Funktionsnamen, Makros, Variablen, Klassen, usw. zu erstellen. In
Latex-Dokumenten wird eine Kapitel-, Tabellen- und Labelübersicht angezeigt.
Faltungen und Suchbefehle funktionieren wie gewohnt.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/majutsushi/tagbar
Mittels :TagbarToggle
oder einem entsprechenden Mapping in der
Konfigurationsdatei wird rechts ein Fenster mit der Tagliste
eingeblendet. Drückt man im Taglisten-Fenster über einem Schlagwort Enter
,
so wird im Hauptfenster das entsprechende Dokument an der jeweiligen Position
geöffnet. Möchte man das Tag-Fenster auf der linken statt auf der rechten Seite
platziert haben, so kann man die ~/.vimrc
um folgende Zeile ergänzen:
let g:tagbar_left = 1
"Optional: Tagbar mit gT aufrufen:
nmap gT :TagbarToggle<CR>
Ultisnips¶
Das Ultisnips-Plugin ist eine Weiterentwicklung des Snipmate-Plugins mit erheblich größerem Funtkionsumfang. Das Plugin ermöglicht es, durch Eingabe kurzer, selbst definierter Textstücke (“Snippets”) und Drücken der Tab-Taste diese durch entsprechende Templates zu ersetzen.
Mittels Vundle kann dieses Plugin über folgendes Repository installiert werden: https://github.com/sirver/ultisnips
Vordefinierte Beispielsnippets finden sich im Paket vim-snippets, das zusätzlich installiert werden
sollte. Bei der Verwendung von Vundle empfielt sich dabei die pinned-Option zu verwenden, damit eigene Änderungen in den
Snippets-Dateien nicht durch Aktualisierungen überschrieben werden. Nach der
Installation befinden sich die Filetype-spezifischen Snippets im Verzeichnis
~/.vim/bundle/vim-snippets/UltiSnips/
.
Die Definition von Snippets erfolgt nach folgender Syntax:
snippet kürzel "Beschreibung" optionen
... template ...
endsnippet
Beispiel: (Definiert in ~/.vim/bundle/vim-snippets/UltiSnips/tex.snippets
)
snippet / "Math Fraction"
\frac{$1}{$2}$0
endsnippet
Wird mit dieser Snippet-Definition in einer .tex
-Datei im Einfügemodus das
Zeichen /
eingegeben und Tab
gedrückt, so wird dieses Zeichen durch
\frac{}{}
ersetzt und der Cursor an die mit $1
bezeichnete Stelle
bewegt. Durch ein Drücken der Jump-Forward-Taste, die ich mit <C-l>
definiert habe, gelangt man zur zweiten Sprungmarke $2
; durch Drücken der
Jump-Backwards-Taste, die ich mit <C-h>
definiert habe, kann man umgekehrt
wieder zur vorherigen Sprungmarke zurückkehren. Erreicht man schließlich,
gegebenenfalls durch mehrmaliges Drücken der Jump-Forward-Taste, die Position
$0
, so wird das Ergänzen des Snippets abgeschlossen; die vorherigen
Sprungmarken können dann nicht mehr angesteuert werden.
Vorgabewerte und Optionen
Sprungmarken können bei der Definition von Snippets auch als ${1}
, ${2}
usw. angegeben werden. Dies nutzt man insbesondere dann, wenn man an den
Sprungstellen mittels ${1:Vorgabe}
einen Standard-Text einfügen mag, der bei
der Ergänzung des Snippets an dieser Stelle eingefügt wird. Gelangt der Cursor
durch Drücken der Jump-Forward-Taste zu so einer Position mit Textvorgabe, so
kann diese durch ein erneutes Drücken der Jump-Forward-Taste bestätigt werden;
gibt man hingegen einen beliebigen anderen Text ein, so wird die Textvorgabe
durch diesen ersetzt.
Vicle¶
Das Vicle Plugin
ermöglicht es, von Vim aus mittels Ctrl c Ctrl c
die aktuelle Zeile oder im
visuellen Modus ganze Codeblöcke an eine offene Screen- oder
tmux
-Sitzung zu schicken. Egal ob Python, R, MySQL oder die Shell selbst als
Interpreter verwendet wird: Skript-Teile lassen sich auf diese Weise bereits
während des Erstellens “on-the-fly” testen.
Mittels Vundle kann dieses Plugin über folgendes Github-Repository installiert werden: https://github.com/vim-scripts/Vicle
Um ein tmux
-Fenster als Ziel für den übergebenen Code zu verwenden, muss man
die ~/.vimrc
um folgenden Eintrag ergänzen:
let g:vicle_use = 'tmux'
Drückt man in einer Vim-Sitzung erstmals Ctrl c Ctrl c
, so wird man
aufgefordert, den Namen der tmux
-Session und des Zielfensters einzugeben. Im
folgenden schickt Vicle alle weiteren Zeilen von dieser Vim-Sitzung aus immer an
dieses Fenster; von mehreren verschiedenen Vim-Sitzungen aus kann allerdings
Text auch an verschiedene Interpreter geschickt werden.
Voom¶
Das Voom Plugin ist eine interaktive Python-Erweiterung[2], die je nach Filetype ein passendes Inhaltsverzeichnis bietet. Voom unterstützt zahlreiche Wiki-Markups (Restructured Text, Markdown u.a.), HTML- und Python-Quellcode.
Mittels Vundle kann dieses Plugin über folgendes Github-Repository installiert werden: https://github.com/vim-voom/VOoM
Um Voom zu nutzen, sind Mappings folgender Art in der Konfigurationsdatei empfehlenswert:
au BufEnter,BufNewFile *.py noremap <F2> :VoomToggle python<CR>
au BufEnter,BufNewFile *.rst noremap <F2> :VoomToggle rest<CR>
au BufEnter,BufNewFile *.rst noremap <F3> :VoomQuitAll <CR>
Damit wird innerhalb einer Python- oder RestructuredText-Datei durch Drücken von
:math:F2
auf der linken Fensterseite ein Inhaltsverzeichnis der aktuellen
Datei eingeblendet. Da Voom in der aktuellen Version das Inhaltsverzeichnis von
Restructured-Text-Dateien (noch) nicht automatisch aktualisiert, wenn man
zwischen diesen wechselt, kann man auf diese Weise eine solche Aktualisierung
manuell beispielsweise durch eine Tastenkombination von F3 F2
erreichen.
Im Normalmodus kann man mittels Tab
zwischen
diesem Fenster und dem Hauptfenster hin und her wechseln, durch Drücken von
Enter
kann ein Eintrag des Inhaltsverzeichnisses direkt angewählt werden.
Yankstack¶
Das Yankstack Plugin speichert automatisch der Reihenfolge nach die zuletzt in die Vim-interne Zwischenablage kopierten Inhalte, so dass diese an anderer Stelle in beliebiger Reihenfolge wieder eingefügt werden können.
Mittels Vundle kann dieses Plugin über folgendes Github-Repository installiert werden:
Zur Verwendung des Yankstack-Plugins verwende ich folgende Mappings in der
~/.vimrc
:
au BufEnter,BufNewFile * nmap gp <Plug>yankstack_substitute_older_paste
au BufEnter,BufNewFile * nmap gn <Plug>yankstack_substitute_newer_paste
Auf diese Weise kann nach einem Einfügen mittels p
oder P
der eingefügte
Inhalt mittels gp
bzw. gn
durch einen früheren bzw. späteren Eintrag in
der Kopier-Liste ersetzt werden.
Anmerkungen:
[1] | Persönlich habe ich, bevor ich zum Ultisnips-Plugin
gewechselt bin, :imap <S-Tab> <Plug>snipMateTrigger
:smap <S-Tab> <Plug>snipMateTrigger
Bei Verwendung des Ultisnips-Plugin kann auch in Kombination mit SuperTab weiterhin die Tab-Taste als Trigger verwendet werden. |
[2] | Hierzu muss neben dem unter Linux bereits vorhandenen Python-System das
Python-Modul vim_bridge installiert werden. Die Installation dieses
Moduls kann in einer Shell durch Eingabe von sudo aptitude install
python-setuptools und sudo easy_install vim_bridge erfolgen. |