Samstag, 5. Mai 2012

Meine Zeit mit Vim: Stunde 5

Es wird Zeit für einen ersten Kompilierungsvorgang mit Vim. Hin- und Herspringen, Editieren und Suchen ist zwar schön und gut und muss trainiert werden - doch eine Belohnung nach all der harten Arbeit ist schon mal angebracht. Mein Ziel heißt also: die PrimeNumbersKata, die ich noch mit Visual Studio erstellt hatte, von Vim aus zu kompilieren.

Um mit Vim kompilieren zu können, muss man ein paar Einstellungen tätigen - klar, ist ja primär auch keine Entwicklungsumgebung für .NET. Kevin Berridge schreibt hier, was zu tun ist. Zumindest theoretisch, falls alle Vorraussetzungen gegeben sind... was bei mir natürlich nicht der Fall war. Auch gut, lernt man bei der Fehlersuche schon etwas mehr über Vim.

Man startet den build nicht mit einem schnöden Tastendruck auf F6 wie in Visual Studio, sondern mit dem :make Befehl - ist gleich viel geekier. Dieser muss aber erst noch konfiguriert werden:

:set makeprg=build.bat

Die build.bat-Datei habe ich in das entsprechende Projekt-Verzeichnis gelegt mit folgendem Inhalt:

msbuild /nologo /v:q

Funktioniert prima - allerdings erst, nachdem ich den Pfad zu msbuild.exe in die Path-Variable mit aufgenommen habe und auch nur vom Command Prompt aus, sprich, wenn ich die build-Datei direkt ausführe. Gebe ich :make in Vim ein, bekomme ich nur

Shell gab 1 zurück

angezeigt. 1 zurück zu bekommen ist immer schlecht; das weiß ich noch von MS-DOS 6.0-Zeiten. Ich hatte Vim direkt gestartet dann mit :e die Datei geöffnet. Nicht gut: so ist das Arbeitsverzeichnis nicht das, wo die zu kompilierende Projektdatei liegt. Also: entweder über die Kommandozeile die Datei in ihrem Verzeichnis öffnen oder mit :cd das Arbeitsverzeichnis von Vim auf den entsprechenden Ort ändern. Dann klappt's auch mit dem Kompilieren :)

Wunderbar - und um nicht ganz das Visual Studio-Feeling zu verlieren, habe ich mir doch noch ein schnödes Tastenkürzel eingerichtet, was ich hier gefunden habe:

:map <F6> :make<CR><C-w><Up>

Nun kann ich genauso wie in Visual Studio kompilieren, denn mit dem :map-Befehl kann Shortcuts erstellen. Meiner ruft nun :make auf und navigiert wieder zurück zu der zuletzt bearbeiteten Datei.

Was ich gelernt habe

  • :set makeprg=build.bat Wählt das Programm, welches mit :make ausgeführt werden soll
  • :cd Wechselt das Arbeitsverzeichnis
  • :map <F6> :make<CR><C-w><Up> Kompiliert mit <F6> und kehrt zur Datei zurück

Mittwoch, 2. Mai 2012

Meine Zeit mit Vim: Stunde 4

Die Geister, die ich rief

Highlighting kenne ich ja seit Visual Studio 2010 - und möchte es nicht mehr missen. Das Suchen-Kommando von Vim (/[string]) funktioniert ähnlich: tippe ich z.B. /the<Enter> ein, werden alle Vorkommen dieser Zeichenkette farbig hinterlegt. Nicht ganz so komfortabel wie in meiner altbekannten IDE, aber ich wette, das kriegt man auch hin.

Das eigentliche Problem wurde mir erst nach dem erfolgreichen Highlighting bewusst: wie bekomme ich die ganzen gelben Dopser wieder weg? In der Hilfe steht zwar ausführlich, wie man vor, zurück und wiederholt sonst wo hin suchen kann - und ein schlichtes <ESC> bricht zwar die Suche ab, doch das hinterlassene visuelle Schlamassel bleibt:


Schlau wie ich bin, suche ich einfach nach "fdfadsfdsafdfdsds". Das gibt es natürlich nicht und wo nichts ist, kann auch nichts gehighlighted werden. Erst 120 Zeilen später steht die Lösung: :nohlsearch. Da finde ich ja mein "Kommando" wesentlich eingängiger...

Was ich gelernt habe

  • H = Home, M = Middle, L = Last
  • <Ctrl>-u scrollt eine halbe Seite hoch, <Ctrl>-d eine halbe Seite runter
  • <Ctrl>-b scrollt fast eine ganz Seite hoch, <Ctrl>-f fast eine ganz Seite runter
  • zz scrollt so, dass der Cursor in der Mitte der Seite ist
  • /[string] sucht nach dem nächsten Vorkommen von [string], ?[string] such rückwärts, n geht zum nächsten Funkstück, N zum vorherigen
  • * sucht nach dem Wort unter dem Cursor, # sucht nach dem Wort zurück
  • Reguläre Ausdrücke funktionieren auch im Suchstring
  • <Ctrl>-o springt zur letzten Cursorposition (sowas wie <Ctrl>-- in Visual Studio), <Ctrl>-i vorwärts
  • m[Buchstabe] setzt ein Lesezeichen, '[Buchstabe] besucht es

Samstag, 28. April 2012

Meine Zeit mit Vim: Stunde 3

Navigation Teil 2

Hjkl klappt nun immer besser. Es wird Zeit, eine Schippe drauf zu setzen - sonst könnte ich ja auch einfach die Pfeiltasten nutzen. Also: Wortnavigation. Wer hätte es gedacht, w springt zum Anfang des nächsten Wortes. Kann ich auch mit <Ctrl>-Pfeiltaste rechts in Visual Studio. Allerdings nicht mit Zahlen kombiniert. Also 3w springt 3 Wörter weiter - glaube ich nicht, dass ich das brauchen könnte. b ist das Äquivalent zu <Ctrl>-Pfeiltaste links.

Hula-hé, dann gibt's da noch e und ge, welche zum nächsten Ende eines Wortes und zum Ende des vorherigen Wortes springen: Symmetrie!

Oh nein, RegEx!?

Als regular expressions-Eingeweihter habe ich gleich erkannt, dass der Sprung zum Zeilenanfang und -Ende dem Anfang und Ende eines regulären Ausdrucks gleicht: ^ und $.


Sollte leicht zu merken sein - allerdings liegt zumindest das ^ Dächle auf einem deutschen Tastaturlayout ziemlich unglücklich. Braucht man gar ein englisches Tastaturlayout, um die Vorteile von Vim auskosten zu können?

Die 0 schafft hier zumindest Abhilfe: das Dächle springt nämlich genauer gesagt zum ersten nicht-Leerstellen-Zeichen einer Zeile, die 0 zum allerersten Zeichen. Also: lieber die 0 verwenden.

Die f-Navigation

Die f-Navigation klingt spannend - vor allem, wenn man das so einfach mit ; wiederholen kann - und dann noch rückwärts mit ,. Cool wäre das, wenn man nicht nur einzelne Buchstaben, sondern auch ganze Wörter suchen könnte. Das wäre dann so, als würde man in Visual Studio <Ctrl>-F drücken, ein Wort eingeben und mit <F3> zum richtigen Wort springen; nur eben besser, da idealere Tasten. Das könnte ich mir durchaus vorstellen, ausgiebig zu nutzen. Mal weiterlesen, ob so etwas noch kommt!?

Am Ende für mich als Starcraft-Fan wieder ein leichtes Kommando: gg = SpielDateianfang 

Was ich gelernt habe

  • ZZ schließt und speichert die Datei
  • w sprint zum nächsten Wort, b zurück
  • e springt zum nächsten Wortende, ge zurück
  • ^ springt zum Zeilenanfang exklusive Leerzeichen, $ zum -ende und 0 zum "echten" Zeilenanfang
  • fx springt zum nächsten x vom Cursor aus gesehen, F zum vorherigen
  • tx springt vor das nächste x vom Cursor aus gesehen, T vor das vorherige
  • f, F, t und T kombiniert mit , und ; rocken
  • % springt zum Pendant der nächsten (oder der jetzigen) Klammer
  • [Zahl]G springt zu Zeile [Zahl], nur G an das Dateiende, gg an den Dateianfang

Mittwoch, 25. April 2012

Meine Zeit mit Vim: Stunde 2

demotivational posters - THE FORCE

Mittlerweile klappt die Navigation ganz gut, ich komme überall hin! Als nächstes steht die Eingabe von Text auf dem Plan: i drücken, dann wird der Modus gewechselt. Fühlt sich irgendwie doof an - vor allem, dass man <ESC> drücken muss, um wieder in den Kommando-Modus zu kommen. Da verlässt man ja auch halber seine Zehn-Finger-Position. Außerdem: was mache ich, wenn ich etwas schreiben möchte, dann 3 Zeichen weiter springen und wieder etwas schreiben möchte: zweimal Moduswechsel zwischendurch? Fühlt sich eher falsch an...

Wer kann sich das merken?

Jede Wette, dass ich die Hälfte der Kommandos in einer Woche vergessen habe. Sind zwar cool und bekommt man mit Visual Studio nicht hin, aber ich bezweifle, dass ich gleich an J denke, wenn ich das Neue-Zeile-Zeichen der aktuellen Zeile löschen möchte (na gut, "J" für "join" und da ich das jetzt geschrieben habe, hat sich das eher in mein Hirn eingebrannt - aber "U" werde ich bestimmt kaum benutzen...).

Intuitiv ist erstmal anders

Was ich mir sehr gut vorstellen kann, zu benutzen, sind die Zahlen vor den Kommandos. Sprich: x-fache Ausführung. Klasse, gleich mal 10 Ausrufezeichen eingeben. Ich tippe also ein: "10i!". Was kommt? Ein i, nicht 10. Klappt ja einwandfrei... Vielleicht liegt es ja an der 10, denke ich mir. Zweistellig ist eventuell nicht so gut. "9i!": selbes Bild. Gegoogelt - irgendwie scheint keiner so ein Problem zu haben. Es vergeht eine halbe Ewigkeit, bis ich mal auf die glorreiche Idee komme, nach "9i!" ein <ESC> zu drücken. Schwupps kommen die !!!!!!!!! Ich doof: so ist das natürlich viel sinnvoller. Da funktionieren dann auch komplexe Muster wie:

(╯°□°)╯︵ ┻━┻
(╯°□°)╯︵ ┻━┻
(╯°□°)╯︵ ┻━┻
(╯°□°)╯︵ ┻━┻
(╯°□°)╯︵ ┻━┻

Was ich gelernt habe

  • i wechselt in den Einfügen-Modus, <ESC> wieder zurück in den Kommando-Modus (normaler Modus)
  • x löscht das Zeichen, worauf der Cursor steht
  • dd löscht die ganze Zeile, in der der Cursor steht
  • J fügt zwei Zeilen zusammen, im Prinzip ein "gehe ans Ende der Zeile und drücke <Entf>"
  • u macht die letzte Änderung rückgängig, <Ctrl>-r stellt es wieder her
  • U macht alle Änderungen, die in der aktuellen Zeile gemacht wurden, rückgängig
  • a wechselt auch in den Einfügen-Modus, nur mit Fokus auf das nächste Zeichen (gut für Zeilenenden)
  • o wechselt in den Einfügen-Modus und erstellt eine neue Zeile unterhalb des Cursors (O oberhalb)
  • Zahlen vor Kommandos, um diese x Mal auszuführen - <ESC> am Ende nicht vergessen...

Samstag, 21. April 2012

Meine Zeit mit Vim: Stunde 1

Installation

Die Installation ist ja für mich als Windows-Benutzer denkbar einfach: ftp://ftp.vim.org/pub/vim/pc/gvim73_46.exe runterladen (o.O nur 9MB? Da kann sich Visual Studio eine Scheibe abschneiden...) und installieren. Danach natürlich die hardcore-Variante Vim und nicht gVim, die "ich will aber mit der Maus klicken"-Variante, ausführen. Nun zeigt sich folgendes Bild:


Na super, bei 9 MB kann ja nur so etwas dabei rauskommen. Da fühlt man sich doch gleich in DOS-Zeiten zurückversetzt. Kein Wunder, denn Vim ist mittlerweile über 20! Jahre alt. Mal schauen, ob der Opa noch rockt :)

Hilfe!

Da mein Ziel ist, während der Entwicklung die Hände von der Tastatur nicht mehr zu entfernen, fange ich gleich mit dem Training an und tippe ":help<Enter>" - nicht das profane <F1>!


Erster Punkt: Move around. Als alter WoW-Zocker weiß ich mich nach jahrelanger Übung in der virtuellen Welt zu bewegen: wasd für vor, links, zurück, rechts. Was macht Vim, um es allen Zockern dieser Welt schwer zu machen: hjkl. Wie idiotisch ist das denn? Dann zeigen die das auch noch in Rauten-Formation an. Auf meiner Tastatur ist hjkl in einer Linie! So zu navigieren fühlt sich total kacke an. Was haben die sich nur dabei gedacht? Aber noch bin ich offen für alles...

Nachdem ich mir einen Überblick der Hilfe-Seite verschafft habe (ich benötige definitiv kein anderes Tutorial) habe ich mich nicht für den interaktiven Tutor, auch nicht für die Quick-Rererenz, sondern für das fette User Manual entschieden: Kapitel 1 About the manuals... nur blabla. Da kann ich beim nächsten Mal gleich mit Kapitel 2 anfangen.

Was ich gelernt habe

  • hjkl für die Navigation
  • <Ctrl>-] (<Ctrl>-+ auf deutscher Tastatur) um einem link zu folgen, <Ctrl>-o geht zurück


Meine Zeit mit Vim: Stunde 0


Ich habe mir in den Kopf gesetzt, Vim zu lernen. Bevor ich damit anfange, definiere ich für mich, wann ich sagen kann: "I know Vim" (ich gebe zu, die Referenz zu Matrix [I know Kung-Fu, ne?] ist schwer ersichtlich).

Dazu ein benchmark: mit Visual Studio, C#, NUnit und ReSharper schaffe ich die Prime Factors Kata gediegen in circa 5 Minuten. Wenn ich mit Vim ohne ReSharper gemütlich genauso schnell bin, kann ich von mir sagen, dass ich Vim kann.

Wieso Vim?

Ich bin träge geworden: ich entwickle seit 7 Jahren mit Visual Studio und habe dessen Komfort schätzen gelernt. Das ist vergleichbar mit einer Rolltreppe: man kommt fast automatisch ans Ziel, es benötigt nur einen Schritt in die richtige Richtung. Will ich aber auf den Säuling, muss ich zu Fuß dorthin - dort gibt es keine Rolltreppen.

Genauso geht es mir, wenn ich in der Programmiersprachen-Welt woanders hin möchte: ich bin zu träge geworden.
  • Scala mit Eclipse? 1 Woche probiert - zurück zu C# und Visual Studio
  • Android-Java mit Eclipse: naja, halt auch nicht Visual Studio :/
  • Ruby on Rails mit Windows? Guter Witz. Da installiere ich eher ein Mac OS...
Deswegen verspreche ich mir, dass, wenn ich back to the roots gehe, mein Widerstand, mich aus meiner comfort-zone zu bewegen, kleiner wird. Mal schauen, wie lange ich durchhalte ;)