2010-04-01 5 views
6

Ich mag die aktuellen Unterschiede in den Quelldateien betrachten, ich arbeite mit einem Befehl wie:Ist es möglich, den Inhalt von Vim einer E-Mail mit Hilfe von HTML

vim <(svn diff -dub) 

Was ich wirklich sein möchte in der Lage zu tun ist, dass colorized diff. Ich weiß, dass vim HTML mit dem: TOhtml exportieren kann, aber wie pipeline ich diese Ausgabe in eine HTML email? Im Idealfall. Ich möchte in der Lage sein, ein HTML-Diff mit einem einzigen Shell-Skript-Befehl zu senden.

Antwort

10

Die folgenden Einzeiler erzeugen eine HTML-Datei email.html genannt:

diff file1 file2 | vim - +TOhtml '+w email.html' '+qall!' 

Sie jetzt Pekka des Code verwenden, um die E-Mail zu senden.

Aber, ich glaube an die Verwendung des richtigen Tools für den richtigen Job - und VIM ist möglicherweise nicht das richtige Werkzeug hier. Andere Textmarker existieren und ihre Verwendung ist hier angemessener.

Zum Beispiel Pygments kann das gleiche Ergebnis, wesentlich effizienten und stressfrei produzieren nutzbar gemacht werden:

diff -u report.log .report.log | pygmentize -l diff -f html > email.html 

Beachten Sie, dass diese produziert nur die eigentlichen Textkörper, nicht das Stylesheet, noch das umgebende HTML-Gerüst. Dies muss separat hinzugefügt werden, aber das ist auch nicht schwierig. Hier ist ein kompletter Bash-Skript eine gültige minimale HTML-Datei zu erzeugen:

echo '<!DOCTYPE html><html><head><title>No title</title><style>' > email.html 
pygmentize -S default -f html >> email.html 
echo '</style></head><body>' >> email.html 
diff -u report.log .report.log | pygmentize -l diff -f html >> email.html 
echo '</body></html>' >> email.html 

EDIT Im Fall, dass Pekka Code funktioniert nicht - wie für mich - weil Sie nicht die erforderlichen Versionen von mail haben und mutt installiert, dann können Sie sendmail wie folgt verwenden die HTML-E-Mail senden:

(echo 'To: [email protected]' 
    echo 'Content-Type: text/html' 
    echo 'Subject: test' 
    echo '' 
    cat email.html) | sendmail -t 

Es ist wichtig, eine leere Zeile zwischen dem Kopf und dem Körper der E-Mail zu verlassen. Beachten Sie auch, dass es unnötig ist, die temporäre Datei email.html zu erstellen. Fügen Sie einfach die restlichen Befehle an der richtigen Stelle oben ein und löschen Sie die Weiterleitungen in die Datei.

+0

Sie haben eine interessante Definition von "effizienter und stressfreier". +1, wie vim zum Schreiben und Beenden von der Kommandozeile kommt. – rampion

+0

Sie könnten die "+ w email.html" zu '+%! Mutt' oder was auch immer ändern, um vim den Mailbefehl direkt aufzurufen – rampion

+0

@rampion: Das Starten von Vim auf diese Weise ist eigentlich ziemlich ineffizient. Pygments übertreffen es leicht.Mit "stressfrei" meine ich einfach, dass der Arbeitsablauf von "Pinguments" konzeptionell einfacher ist ("Syntax-Hervorhebung eines Vergleichs", im Gegensatz zu "Öffnen eines Vergleichs in einem Editor, Ausführen eines Befehls, Schließen des Editors"), obwohl es mehr Text enthält schreiben. Beide Methoden haben ihre Vorzüge, denke ich. –

1

Ich bin kein Linux Guru, aber das sieht aus wie es Ihre Bedürfnisse Rohr Ihre Ausgabe in dienen sollte:

Send an HTML file as email from the command line. (verwendet mail)

Es gibt auch eine einzeilige mutt Beispiel here:

Dies wird eine reine HTML-E-Mail ohne reine Textalternative generieren - dafür müssten Sie mehrteilige Mail erstellen ... Aber vielleicht wird es für das tun, was Sie brauchen.

+0

Möchten Sie den Downvote erklären? Ist hier etwas technisch falsch? –

Verwandte Themen