Vor diesem Editor habe ich mich lange Zeit gesträubt: VIM (vi improved). Die Einarbeitung ist doch etwas schwierig, da die Benutzung sehr auf Tastatur ausgelegt ist. Doch wenn die grundsätzlichen Befehle (und vor Allem die zugrundelegende Logik) bekannt ist, gelingt ein sehr flüssiges Arbeiten. Hauptsächlich arbeite ich ungern mit der Maus und gern im Terminal/Konsole. Folgend nun einige Tutorials bzw. nützliche Plugins.
VIM arbeitet in mehreren Modi, deren wichtigste sind: Normal-Modus (ansehen, ersetzen), Einfügemodus (bearbeiten), Visueller Modus (selektieren) Command-line-Modus (Angabe von Ex-Kommandos). Hinzugefügt werden kann Text grundsätzlich nur im Einfügemodus (zu Erreichen durch i [Bearbeiten vor dem Cursor] oder a [hinter dem Cursor] oder o [unter dem Cursor]).
Eines der wichtigsten Editierfunktionen ist sicherlich das Kopieren oder Verschieben von Text. Durch v (zeichenweise) oder V (zeilenweise) in den visuellen Modus wechseln und den gewünschten Text mit den Cursortasten markieren.
yy => copy current line
y => copy selected text („v“)
d => cut/delete selected text („v“)
p => paste
Weitere Infos dazu finden sich auf vim.wikia.com, tech-recipes.com oder alvinalexander.com.
Cut & Paste
Dateien aus der Betriebssystem-Zwischenablage lassen sich folgendermaßen einfügen:
- :set paste autoindent verhindern
- i in Einfüge-Modus wechseln
- rechte Maustaste -> Einfügen
Um Texte aus VIM in andere Programme zu kopieren, muss VIM mit der Option clipboard installiert/kompiliert sein. Dies ist standardmäßig nicht der Fall.
Darstellung von Dateien
VIM bietet auch die Möglichkeit, mehrere Dateien per Splitscreen parallel zu öffnen:
:vsp filename
cmd+w cmd+w => switch between files/viewports
cmd+w q => close active window/file
Plugins
Erst Plugins machen VIM zu einem richtig praktischen Editor, fast zu einer IDE. Anfangs hab ich es mit vim-pathogen probiert, später bin ich zu spf13 gewechselt. Ersteres baut auf Git-Submodule, zweiteres auf Vundle (und ist standardmäßig umfangreicher). Die meiner Meinung nach nützlichsten Plugins sind:
- NERDTree (zur Darstellng eines Dateibaums)
- Undotree
- crtlp (Liste verwendeter Dateien)
- Fugitive (Git-Integration)
- Tagbar
- Airline (eine bessere Statusleiste)
- AutoClose
- sessionman (Verwalten von Projekten/Sessions)
Eine passende Übersicht findet sich auf vim.wikia.com. Dort wird zum Beispiel auch netrw zur FTP-Integration genannt.
Installation von spf13:
$ curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh
Tagbar
Für Tagbar muss ctags auf dem System vorhanden/installiert sein. Hier eine kurze Installationsanleitung:
- download ctags (http://ctags.sourceforge.net/)
- install ctags:
$ cd path/to/ctags/ $ ./configure $ make $ sudo make install $ make clean
3. start vim & tagbar: `:TagbarOpen` or `:TagbarToggle`
Autovervollständigung
Prüfen auf Verfügbarkeit einer Autovervollständigung:
$ vim :echo has("lua") => if_lua disabled -> neocomplete funktioniert nicht! $ echo UnBundle \'neocomplete\' >> ~/.vimrc.bundles.local
Literatur
Passende und zu empfehlende (Einstiegs-)Literatur:
„vim 7 GE-PACKT“, Reinhard Wobst, mitp, ISBN 978-3-8266-1781-2
Cheatsheet
Hier ein kurzer Cheatsheet (spf13):
spf13 <leader> is: ,
<leader>e open NERDTree with current file
<leader>fc Find merge conflict markers
<leader>ff display all lines with keyword under cursor and ask which one to jump to
<leader>fu ctrl-p funky / list recently modified lines
<leader>gs :Gstatus works like ‚git status‘
<leader>gd :Gdiff works like ‚git diff‘
<leader>gc :Gcommit works like ‚git commit‘
<leader>gl :Glog works like ‚git log‘
<leader>gp :Gpush works like ‚git push‘
<leader>gr :Gedit ??
<leader>gw :Gwrite works like ‚git add %‘ if working-copy is active window
<leader>ge :Gread works like ‚git co %‘ if working-copy is active window
<leader>ru list recently used files <silent> <D-r>
<leader>sc close session
<leader>sl list sessions
<leader>ss save session
<leader>tt toggle tagbar
<leader>u toggle undo-tree
<C-p> list files
:vim /pattern/gj path
> Suche in path nach pattern
> Option `g`: alle Vorkommen
> Option `j`: unterbinde Öffnen des ersten Suchergebnisses (der ersten Datei)
:cn nächstes Suchergebnis (Datei) öffnen
:cp vorheriges Suchergebnis (Datei) öffnen
:cw Suchergebnisse auflisten
:!echo # prints current filename
:!CMD execute Shell-Command
:pwd prints current directory
:let @/ = „“ clear search-highlighting by clearing search-string
:noh clear search-highlighting