Sonntag, 14. Februar 2016

Code snippet beautification in vim

Hallo Welt! Chris hatte neulich ein schönes tool zum Verhübschen von Source Code vorgestellt (Gist). Das ist nützlich für Blogposts in denen man mal ein Stück Code vorstellen will.

Nun bin ich ein alter VIM user, denn in meinen Augen ist das der beste Editor der Welt und mithilfe diverser Plugins kann man ihm ungeahnte neue Trick beibringen. Einige erstaunliche Sachen kann er aber auch schon ohne solche Erweiterungen. Dazu gehört ein sehr hilfreiches Syntax-Highlighting für ziemliche alle Programmiersprachen, die es so gibt. Und wie es der Zufall so will bringt vim auch einen html Konverter mit! Um den aufzurufen gibt man einfach im Kommandozeilen Modus folgendes ein:

:TOhtml

Das Ergebnis landet in einem neuen Buffer und kann von dort als html File gespeichert oder eben in den Blog kopiert werden – zumindest der Teil zwischen den body tags. Probieren wir das also mal aus mit einem code snippet für die Collatz conjecture. Das sieht dann so aus:

def collatz(number):
    path = [number]
    while number != 1:
        if even(number):
            number /= 2
        else:
            number = number * 3 + 1
        path.append(number)
    return(path)

Die Formatierung passt schon, aber  Syntax-Highlighting wäre toll. Der Grund das es fehlt ist, dass vim per default CSS verwendet, was aber problematisch ist, wenn man nur das snippet kopiert. Man kann das aber auch abschalten, und zwar so:

:let html_use_css=0

Und dann wären Zeilennummern noch schön. Also:

:set number

Das Ergebnis gefällt mit schon sehr gut:

19 def collatz(number):
20     path = [number]
21     while number != 1:
22         if even(number):
23             number /= 2
24         else:
25             number = number * 3 + 1
26         path.append(number)
27     return(path)



Die Zeilennummern gehen bei 19 los, weil das die Zeile im Original File war. Wenn ich für das Snippet lieber bei 1 starten möchte dann muss ich vorher eben noch das Snippet in ein eigenes File tun - auch kein Akt. Und wenn einem das Farbschema nicht gefällt gibt es natürlich diverse zur Auswahl. z.B.:

:colorscheme delek

und man bekommt dies (diesmal mit Nummerierung bei 1 startend):

def collatz(number):
        path = [number]
        while number != 1:
                if even(number):
                        number /= 2
                else:
                        number = number * 3 + 1
                path.append(number)
        return(path)

3 Kommentare:

  1. Cool! Das ist natürlich noch besser. Verwende zwischenzeitlich auch fast nur mehr Vim und hab ein paar coole Plugins installiert: NerdTree, Syntastic und Airline. Natürlich über Pathogen ;-).

    AntwortenLöschen
  2. Diese Plugins verwende ich ebenfalls und spiele immer wieder mal mit neuen herum, um zu sehen, was sonst noch so alles geht. Meine Plugins verwalte ich mit Vundle.
    Hatte auch mal mit EMACS gespielt. Sicher ein sehr guter Editor, aber irgendwie habe ich einfach nicht genug Finger dafür...

    AntwortenLöschen
    Antworten
    1. ... obwohl ich zugeben muss, dass ich mich trotzdem daruber totgelacht habe:

      https://twitter.com/iamdevloper/status/435555976687923200?lang=de

      Löschen