Von Sublime zu Vim? Ein Um- und Einstiegsversuch

Vim ist so einiges, aber sicher nicht einsteigerfreundlich. Dennoch bin ich immer wieder fasziniert, wie sich erfahrene Anwender durch ihren Code navigieren und in der kleinen Kommandozeile Aktionen auslösen, für die die meisten erstmal ein anderes Programm starten müssen. Zudem ist alles frei konfigurierbar und vor allem freie Software.

Mal sehen, wie ich meinen auf Sublime aufbauenden Entwickleralltag übertragen kann.

Vim zurücksetzen

Wer, wie ich, wirklich von vorne beginnen will:

rm -rf .vimrc .vim

Fuzzy-Search mit Crtlp

Terminal auf, ins Projektverzeichnis wechseln, vim tippen. Wie nun die gewünschte Datei öffnen? In Sublime suche ich „fuzzy“ danach, indem ich Strg+p drücke. Super, genau dieser Workflow hat es in ein Vim-Plugin namens ctrlp.vim geschafft.

mkdir ~/.vim && cd ~/.vim && git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim && echo "set runtimepath^=~/.vim/bundle/ctrlp.vim" >> ~/.vimrc

In Vim:

:helptags ~/.vim/bundle/ctrlp.vim/doc
:q

Beim nächsten Öffnen von Vim sollte man im Projekt sublimisch navigieren können.

<c-p>
Mit Fuzzy-Search suchen
<c-j>/<c-k>
Durch Suchergebnisse navigieren
ctrlp.vim
ctrlp.vim

Plugin-Verwaltung: Pathogen

Apropos Plugins: Das ist in Sublime schön zentral durch ein Plugin gelöst. Das kann Vim auch: Pathogen. Nach der Installation kann man Plugins direkt als Git-Repo in das Verzeichnis ~/.vim klonen.

mkdir -p ~/.vim/autoload ~/.vim/bundle; curl -Sso ~/.vim/autoload/pathogen.vim https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim

Nun noch an den Anfang der ~/.vimrc:

execute pathogen#infect()

Grundlegende Formatierung

Bei den ersten Gehversuchen fällt schnell auf, dass Vim zumindest für Ruby unübliche Tab-Einstellungen nutzt und, welch ein Graus, bei der Einrückung nicht mitdenkt: Man beginnt nach einem Druck auf Enter immer ganz vorne in der Zeile.

Tab-Größe nach Dateitypen einstellen

Erstmal wieder in die .vimrc, aufgeräumt wird später:

echo "autocmd FileType html setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType ruby setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType javascript setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType coffee setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType css setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType sass setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType scss setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType haml setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType erb setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc
echo "autocmd FileType yaml setlocal shiftwidth=2 tabstop=2" >> ~/.vimrc

Automatische Einrückung

.vimrc:

set nocompatible
set smartindent
set autoindent
filetype indent on

Eine Statuszeile: Airline

Nicht wirklich aus Sublime, aber aus einigen Vim-Eindrücken weiß ich um schicke Statusleisten, die den aktuellen Modus farbig hervorheben, den Git-Status zeigen und auch sonst viel Zeug können. Das meiste Zeug ist sicher sinnlos, genau das will ich also auch.

Mal googeln: Da gibt es Powerline, die Super-Allzweckwaffe getarnt als Statusanzeiger. Ist laut eigener Aussage aber etwas komplizierter zu installieren. Wer es einfach will, möge stattdessen Airline nehmen. Machen wir das doch, das kann unser neuer Paketmanager wenigstens ohne Hilfe:

git clone https://github.com/bling/vim-airline ~/.vim/bundle/vim-airline

Vim neustarten, nichts zu sehen. Super. Im Projektwiki dann bisschen was zusammengesucht und ab in die .vimrc:

set laststatus=2
let g:airline_theme = 'powerlineish'
if !exists('g:airline_powerline_fonts')
    " Use the default set of separators with a few customizations
    let g:airline_left_sep=' ›'  " Slightly fancier than '>'
    let g:airline_right_sep='‹ ' " Slightly fancier than '<'
endif

Keine Ahnung was die erste Zeile bedeutet, aber es hilft. Dennoch sieht alles nicht sehr schick aus.

Color-Schemes

Hier musste ich eine Weile experimentieren, mein Terminal hat die von mir gewählten Farbschemata immer wieder überschrieben. Grund dafür ist, dass ich Vim im Terminal nutze und nicht als Standalone-GUI. Daher muss man auf 256-Farb-Schemen zurückgreifen und Vim ensprechend konfigurieren:

cd ~/.vim/colors
wget https://raw.github.com/vim-scripts/wombat256.vim/master/colors/wombat256mod.vim

Und wieder in die .vimrc:

set t_Co=256
color wombat256mod

Das sieht schick aus. Aber vor einem Screenshot noch die...

Git-Unterstützung

In der Statusbar soll der aktuelle Branch angezeigt werden. Hierfür wird das (auch außerhalb der Statuszeile überaus mächtige) Plugin fugitive.vim verwendet.

cd ~/.vim/bundle && git clone git://github.com/tpope/vim-fugitive.git

Nun das Plugin mit Airline verknüpfen (natürlich in der .vimrc):

let g:airline#extensions#branch#enabled = 1

Ersteindruck

Ich bin von meiner ersten Konfiguration recht angetan. Pragmatismus hin oder her, um sich einer Entwicklungsumgebung wohlzufühlen muss das Ganze auch nach etwas aussehen. Ich denke nicht, dass sich Vim vor Sublime verstecken braucht.

Vim mit Wombat-Theme und Airline-Statusleiste
Vim mit Wombat-Theme und Airline-Statusleiste

Dennoch bleibt der Einstieg hart. Ich habe Vim in den letzten Jahren immer mal wieder für Konfigurationen genutzt und bin mit der HJKL-Navigation recht gut vertraut. Dennoch ist Code-Schreiben noch sehr ungewohnt. Der ständige Modiwechsel verwirrt, wirkt sperrig und überhaupt muss man vor fast jeder Aktion nachdenken. Das wird mit etwas Übung sicher leichter, dennoch werde ich mich demnächst mal umsehen, wie man einige bekannte Verhaltensmuster aus Sublime und Co. übernehmen kann.

8 Kommentare

  1. Mhm, ja. rm -rf [zwei Dateinamen]. Erste Blödheit im Artikel. 😉

    In Vim kenne ich jetzt mindestens drei Lösungen (VAM, Vundle, Pathogen) für einen Paketmanager. Hmja. Und ja, die automatische Einrückung von Vim ist standardmäßig zum Speien.

    Ich bin neulich auch von Sublime Text weg – zu Emacs. Einfach, weil ich in Emacs das „GoTo Anything“ beinahe verlustfrei nachbilden kann (und mich nicht mit Modi rumschlagen muss). Auf dem Server zum Config-Editieren ist Vim unschlagbar, aber zum Programmieren?

    Etwas schade, dass du im Artikel nur wenige Features ansprichst (Statuszeilengedöns ist nun nicht unbedingt etwas, was für ST-Umsteiger interessant ist :-D). Kommt noch ein Nachfolgeartikel?

  2. Der Artikel ist nur eine Mitschrift von meinen spontanen ersten Schritten und Eindrücken, also nichts belastbares. Die paar Punkte waren eben die ersten die mir so auffielen, irgendwo muss man ja anfangen. Möchte damit auch weitermachen, wenn mich Vim nicht in den Wahnsinn treibt. Ich denke schon, dass man damit sehr gut programmieren kann. Wenn man es denn kann…

    Emacs ist natürlich auch interessant, damit hatte ich aber noch nie zu tun und kenne auch kaum jemanden der es nutzt. Insofern lag Vim einfach näher. Zudem scheint Emacs ja näher an „normalen“ Editoren zu liegen, aber mit gänzlich anderen Shortcuts. Das fand ich immer etwas befremdlich. Aber Vim oder Emacs ist ja wohl ein heißes pseudoreligiöses Thema, da will ich mich nicht einmischen.

    Und was passt dir nicht an rm -rf [zwei Dateinamen]? Und überhaupt: Musst du keine Feminismus-Edit-Wars führen? 😉

  3. Mist. Ich WUSSTE, ich hab was vergessen…

    An rm stört mich nix, nur -rf ist quasi doppelt Käse.

    Emacs mit evil-mode hat „Vim-Tastenbelegung“. Schau es dir mal an, wenn du mal Langeweile hast. Meine Konfig. ist hier… 🙂

    Aber warum willst du eigentlich von Sublime weg? Auch wegen der Lizenzkosten?

  4. .vim ist ein Verzeichnis, -r ist da absolut käselos. Und -f… gehört doch quasi dazu.

    Nein, Lizenzkosten sind mir eigentlich egal. So viel ist es ja auch nicht. Aber Vim ist freie Software und mir damit prinzipiell eher Geld wert. Ich möchte Plugins schreiben können und frei veröffentlichen. Da will ich sicher sein dass die Grundlage auch morgen noch existiert und ich fände es auch komisch wenn jemand Geld damit macht, dass viele Leute unentgeltlich Plugins für ein geschlossenes Produkt beisteuern. Dann wäre da die allgemeine Verbreitung, Vim findet man auf jedem vernünftigen Rechner. Ich arbeite gern im Terminal, Vims nähe dazu gefällt mir sehr. Irgendwie daraus ergibt sich wohl die Lust es mal zu versuchen. Zudem möchte man ja auch ab und an was neues kennenlernen.

    Bei dir nur wegen des Geldes?

  5. „Gehört dazu“? Achjeh… 😉

    Nein, nicht wegen des Geldes – also nicht nur. Das hab ich doch ausführlich beschrieben. 🙂

  6. So falsch liegt Sebastian mit -f gehört doch quasi dazu gar nicht. Bei CentOS z.B. ist ein Standard alias in der Shell rm=’rm -i‘ nachdem er einen Ordner mit einer unbestimmten Anzahl von Dateien löschen wollte ohne und wahrscheinlich ohne Fehlermeldung wenns die Dateien nicht gibt ist das absolut legitim

  7. „ohne und“? ohne was?
    Ich sollte wohl keine Kommentare auf nem iPad in der uBahn schreiben.
    „ohne jede Löschung bestätigen zu müssen“

  8. „ohne und“? ohne was?
    Ich sollte wohl keine Kommentare auf nem iPad in der uBahn schreiben.
    „ohne jede Löschung bestätigen zu müssen“
    wollte ich schreiben

Kommentare sind geschlossen.