2013-03-19 9 views
7

Ich hätte gerne less Anzeige *.md Markdown-Dateien mit einigen Formatierungen - wie ich weiß less kann, für Manpages, etc. Ich bin Ubuntu 12.04 ausgeführt.Wie konfiguriere ich 'weniger' um formatierte Markdown-Dateien anzuzeigen?

Ich bin so weit wie ein Benutzer setzen definierten Filter in .lessfilter:

#!/bin/sh 
case "$1" in 
    *.md) 
    fn=/tmp/$1.$$.html 
    markdown "$1" | html2txt > $fn ### LOSES FORMATTING 
    cat $fn       ### TO STDOUT??? 
    ;; 
    *) 
    # We don't handle this format 
    exit 1 
esac 
# No further processing by lesspipe necessary 
exit 0 

So sind die wichtigsten Fragen:

  • Wie kann ich einige grundlegende Formatierungen Informationen zu less passieren, wie Nun, anstatt es zu verlieren mit html2txt
  • Ist es richtig, nur den neuen Inhalt zu drucken stdout? Oder könnte ich schreiben Sie einfach den *.html Datenträger-Datei und lassen less dass html auf eigene Abschweifung Griff (sehen Sie die HTML-Erweiterung und wirkt auf sie?)

Antwort

7

einen Blick auf Pandoc nehmen. Es kann Dateien vom Markdown-Format in groff man-Seiten konvertieren, die Sie dann in man anzeigen können.

Ihre .lessfilter Skript wäre:

case "$1" in 
    *.md) 
    pandoc -s -f markdown -t man "$1" | man -l - 
    ;; 

Alternativ wandelt es mit dem markdown Befehl in HTML und verwenden Sie dann den lynx Browser es zu sehen, aber das ist für mich nicht allzu gut funktionieren.

case "$1" in 
    *.md) 
    markdown "$1" | lynx -stdin 
    ;; 

Und ja, das lessfilter Skript muss auf stdout schreiben.

+2

tatsächlich, die 'Markdown" $ 1 "| html2text' Version funktioniert am besten, weil ich ASCII-Art Fettdruck usw. auf diese Weise bekomme. Die 'pandoc | man'-Variante funktioniert grundsätzlich, aber jedes Format ist verloren. Ich nehme an, weil die Ausgabe für "weniger" in eine Pipe geht, und das verhindert, dass "man" irgendeine Formatierung durchführt. Die 'Markdown | lynx'-Variante macht gar nichts, vielleicht weil' lynx' interaktiv ist? Ich bekomme nur die Originaldatei angezeigt. – towi

2

Dogbane's Antwort ist großartig, aber wenn Sie groff -T utf8 -man anstelle von man -l verwenden, um die Formatierung zu tun, dann kommen die fett, kursiv, usw. durch. Wie hier zu sehen: https://stackoverflow.com/a/20197316/2674930.

2

Dies funktionierte nicht auf meiner Version von MacOSX (10.10.5 Yosemite). Die Manpage erwähnt auch keine .lessfilter. Hier ist, was ich getan habe (nach dem Lesen der MAN-Seite - dank dieser Frage für die Eingabeaufforderung und Hinweise).

Ich habe die Skripte lessopen.sh und lessclose.sh in meinem ~/bin erstellt. Beziehungsweise sie sind:

#!/bin/bash 

case "$1" in 
    *.md) 
    pandoc -s -f markdown -t man "$1" | groff -T utf8 -man > /tmp/less.$$ 
    if [ -s /tmp/less.$$ ]; then 
     echo /tmp/less.$$ 
    else 
     rm -f /tmp/less.$$ 
    fi 
    ;; 
esac 

und

#!/bin/sh 
rm $2 

Die Rückkehr aus dem lessopen.sh ist der Name der Datei mit dem Inhalt zu less en. Oder wenn nichts, dann wird die Originaldatei verwendet. Die -s testet, ob die Datei NICHT von Null ist. Die lessclose.sh räumt auf.

Dann in meinem ~ /.bash_profile ist:

export LESSOPEN="lessopen.sh %s" 
export LESSCLOSE="less-close.sh %s %s" 

Ich musste auch pandoc installieren - groff existierte bereits

brew install pandoc 

Dann einfach:

less README.md 

es gemacht zu lesen.

Verwandte Themen