{"id":2364,"date":"2013-10-17T19:42:37","date_gmt":"2013-10-17T17:42:37","guid":{"rendered":"https:\/\/sgaul.de\/?p=2364"},"modified":"2013-10-20T13:56:53","modified_gmt":"2013-10-20T11:56:53","slug":"von-sublime-zu-vim-ein-um-und-einstiegsversuch","status":"publish","type":"post","link":"https:\/\/sgaul.de\/2013\/10\/17\/von-sublime-zu-vim-ein-um-und-einstiegsversuch\/","title":{"rendered":"Von Sublime zu Vim? Ein Um- und Einstiegsversuch"},"content":{"rendered":"

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\u00f6sen, f\u00fcr die die meisten erstmal ein anderes Programm starten m\u00fcssen. Zudem ist alles frei konfigurierbar und vor allem freie Software.<\/p>\n

Mal sehen, wie ich meinen auf Sublime aufbauenden Entwickleralltag \u00fcbertragen kann.
\n<\/p>\n

Vim zur\u00fccksetzen<\/h2>\n

Wer, wie ich, wirklich von vorne beginnen will:<\/p>\n

rm -rf .vimrc .vim<\/pre>\n

Fuzzy-Search mit Crtlp<\/h2>\n

Terminal auf, ins Projektverzeichnis wechseln, vim<\/code> tippen. Wie nun die gew\u00fcnschte Datei \u00f6ffnen? In Sublime suche ich \u201efuzzy\u201c danach, indem ich Strg<\/kbd>+p<\/kbd> dr\u00fccke. Super, genau dieser Workflow hat es in ein Vim-Plugin namens ctrlp.vim<\/a> geschafft.<\/p>\n

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

In Vim:<\/p>\n

:helptags ~\/.vim\/bundle\/ctrlp.vim\/doc\r\n:q<\/pre>\n

Beim n\u00e4chsten \u00d6ffnen von Vim sollte man im Projekt sublimisch navigieren k\u00f6nnen.<\/p>\n

\n
<c-p><\/dt>\n
Mit Fuzzy-Search suchen<\/dd>\n
<c-j>\/<c-k><\/dt>\n
Durch Suchergebnisse navigieren<\/dd>\n<\/dl>\n
\"ctrlp.vim\"<\/a>
ctrlp.vim<\/figcaption><\/figure>\n

Plugin-Verwaltung: Pathogen<\/h2>\n

Apropos Plugins: Das ist in Sublime sch\u00f6n zentral durch ein Plugin gel\u00f6st. Das kann Vim auch: Pathogen<\/a>. Nach der Installation kann man Plugins direkt als Git-Repo in das Verzeichnis ~\/.vim klonen.<\/p>\n

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

Nun noch an den Anfang der ~\/.vimrc:<\/p>\n

execute pathogen#infect()<\/pre>\n

Grundlegende Formatierung<\/h2>\n

Bei den ersten Gehversuchen f\u00e4llt schnell auf, dass Vim zumindest f\u00fcr Ruby un\u00fcbliche Tab-Einstellungen nutzt und, welch ein Graus, bei der Einr\u00fcckung nicht mitdenkt: Man beginnt nach einem Druck auf Enter immer ganz vorne in der Zeile.<\/p>\n

Tab-Gr\u00f6\u00dfe nach Dateitypen einstellen<\/h3>\n

Erstmal wieder in die .vimrc, aufger\u00e4umt wird sp\u00e4ter:<\/p>\n

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

Automatische Einr\u00fcckung<\/h3>\n

.vimrc:<\/p>\n

set nocompatible\r\nset smartindent\r\nset autoindent\r\nfiletype indent on<\/pre>\n

Eine Statuszeile: Airline<\/h2>\n

Nicht wirklich aus Sublime, aber aus einigen Vim-Eindr\u00fccken wei\u00df ich um schicke Statusleisten, die den aktuellen Modus farbig hervorheben, den Git-Status zeigen und auch sonst viel Zeug k\u00f6nnen. Das meiste Zeug ist sicher sinnlos, genau das will ich also auch.<\/p>\n

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\u00f6ge stattdessen Airline<\/a> nehmen. Machen wir das doch, das kann unser neuer Paketmanager wenigstens ohne Hilfe:<\/p>\n

git clone https:\/\/github.com\/bling\/vim-airline ~\/.vim\/bundle\/vim-airline<\/pre>\n

Vim neustarten, nichts zu sehen. Super. Im Projektwiki dann bisschen was zusammengesucht und ab in die .vimrc:<\/p>\n

set laststatus=2\r\nlet g:airline_theme = 'powerlineish'\r\nif !exists('g:airline_powerline_fonts')\r\n    \" Use the default set of separators with a few customizations\r\n    let g:airline_left_sep=' \u203a'  \" Slightly fancier than '>'\r\n    let g:airline_right_sep='\u2039 ' \" Slightly fancier than '<'\r\nendif<\/pre>\n

Keine Ahnung was die erste Zeile bedeutet, aber es hilft. Dennoch sieht alles nicht sehr schick aus.<\/p>\n

Color-Schemes<\/h2>\n

Hier musste ich eine Weile experimentieren, mein Terminal hat die von mir gew\u00e4hlten Farbschemata immer wieder \u00fcberschrieben. Grund daf\u00fcr ist, dass ich Vim im Terminal nutze und nicht als Standalone-GUI. Daher muss man auf 256-Farb-Schemen zur\u00fcckgreifen und Vim ensprechend konfigurieren:<\/p>\n

cd ~\/.vim\/colors\r\nwget https:\/\/raw.github.com\/vim-scripts\/wombat256.vim\/master\/colors\/wombat256mod.vim<\/pre>\n

Und wieder in die .vimrc:<\/p>\n

set t_Co=256\r\ncolor wombat256mod<\/pre>\n

Das sieht schick aus. Aber vor einem Screenshot noch die...<\/p>\n

Git-Unterst\u00fctzung<\/h2>\n

In der Statusbar soll der aktuelle Branch angezeigt werden. Hierf\u00fcr wird das (auch au\u00dferhalb der Statuszeile \u00fcberaus m\u00e4chtige) Plugin fugitive.vim<\/a> verwendet.<\/p>\n

cd ~\/.vim\/bundle && git clone git:\/\/github.com\/tpope\/vim-fugitive.git<\/pre>\n

Nun das Plugin mit Airline verkn\u00fcpfen (nat\u00fcrlich in der .vimrc):<\/p>\n

let g:airline#extensions#branch#enabled = 1<\/pre>\n

Ersteindruck<\/h2>\n

Ich bin von meiner ersten Konfiguration recht angetan. Pragmatismus hin oder her, um sich einer Entwicklungsumgebung wohlzuf\u00fchlen muss das Ganze auch nach etwas aussehen. Ich denke nicht, dass sich Vim vor Sublime verstecken braucht.<\/p>\n

\"Vim<\/a>
Vim mit Wombat-Theme und Airline-Statusleiste<\/figcaption><\/figure>\n

Dennoch bleibt der Einstieg hart. Ich habe Vim in den letzten Jahren immer mal wieder f\u00fcr Konfigurationen genutzt und bin mit der HJKL-Navigation recht gut vertraut. Dennoch ist Code-Schreiben noch sehr ungewohnt. Der st\u00e4ndige Modiwechsel verwirrt, wirkt sperrig und \u00fcberhaupt muss man vor fast jeder Aktion nachdenken. Das wird mit etwas \u00dcbung sicher leichter, dennoch werde ich mich demn\u00e4chst mal umsehen, wie man einige bekannte Verhaltensmuster aus Sublime und Co. \u00fcbernehmen kann.<\/p>\n","protected":false},"excerpt":{"rendered":"

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\u00f6sen, f\u00fcr die die meisten erstmal ein anderes Programm starten m\u00fcssen. Zudem ist alles frei konfigurierbar und vor allem freie Software. Mal sehen, wie ich meinen auf… Von Sublime zu Vim? Ein Um- und Einstiegsversuch<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":2386,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[159,91],"tags":[527,552,569,571],"_links":{"self":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2364"}],"collection":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/comments?post=2364"}],"version-history":[{"count":23,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2364\/revisions"}],"predecessor-version":[{"id":2398,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/2364\/revisions\/2398"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media\/2386"}],"wp:attachment":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media?parent=2364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/categories?post=2364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/tags?post=2364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}