Ich mag ja den :hardcopy Befehl vom allroundtexteditor Vim, für Mac OS X auch als MacVim bekannt. Er veranlasst das direkte Drucken der geöffneten Datei bzw. des Fensterinhaltes an den Standarddrucker oder unter Mac OS X die Druckvorschau.

Hat man die Syntaxhervorhebung aktiviert, wird der Quellcode entsprechend des gewählten Farbschemas farbig und lesbarer dargestellt und auch so gedruckt.
So kann es aber passieren, dass ein Farbschema am Bildschirm gut aussieht, aber auf dem Ausdruck nicht so optimal ist.

Der folgende Screenshot zeigt so einen beispielhaften Ausdruck, wo die Farben der Syntaxhervorhebung für mich aber zu dunkel und unscheinbar sind:

Screenshot: Vim hardcopy Druckvorschau

Bei einem anderen Farbschema sieht der Ausdruck besser und von den Farben her kräftiger aus, nur leider gefallen mir die Farben dann nicht mehr im Editor selbst:

Screenshot: Vim hardcopy Druckvorschau

Und genau hier ist der Knackpunkt. Denn ich kann beim Vim keine Option finden, mit welcher ich für die Anzeige und den Druck verschieden Farbschemas festlegen kann.

Nach einer Recherche im Netz bin ich auf folgenden Tipp gestossen, bei dem für den Ausdruck kurz das Farbschema gewechselt wird.

Ich hab das ganze etwas an meine Bedürfnisse angepasst und folgendes in meine .vimrc mit aufgenommen:

" special hardcopy (print) color scheme
function UseMyHardcopyColors(args)
  if has("gui_running")
    " save current colors
    let save_bg=&bg
    let save_cs=g:colors_name
    " set new colors
    set bg=light
    colorscheme solarized
    " call hardcopy
    exec 'hardcopy '.a:args
    " reset colors
    exec 'set bg='.save_bg
    exec 'colorscheme '.save_cs
  else
    exec 'hardcopy '.a:args
  endif
endfunction

" set new command Hardcopy
command! -nargs=* Hardcopy call UseMyHardcopyColors('')

Es folgt eine kurze Erklärung, was der obige Code macht:

  1. Es wird eine Funktion namens UseMyHardcopyColors angelegt.
  2. Es erfolgt eine Prüfung, ob wir uns im Terminal oder der grafischen Vim Version befinden.
  3. Es werden die aktuellen Farbeinstellungen gespeichert.
  4. Es werden die gewünschten Farbeinstellungen für den Druck gesetzt.
  5. Es wird der :hardcopy Befehl mit möglichen Argumenten ausgeführt.
  6. Es werden die ursprünglichen Farbeinstellungen wieder gesetzt.
  7. Als letztes wird ein neuer Befehl :Hardcopy (mit großem ‚H‘ am Anfang) angelegt, welcher die eben angelegte Funktion aufruft.

Möchte ich nun einen Quelltext mit meinem für den Druck gewünschten Farbschema drucken, wähle ich den neuen :Hardcopy Befehl. Alternativ kann ich dann immer noch den vorhanden :hardcopy Befehl, welcher sich an dem aktuellen Farbschema orientiert, nehmen. :)