Esiste un'utilità da riga di comando per il rendering di Markdown aromatizzato GitHub?


414

Mi chiedo se esiste un'utilità da riga di comando per prendere un file Markdown aromatizzato GitHub e renderlo in HTML.

Sto usando un wiki GitHub per creare contenuti per siti Web. Ho clonato il repository sul mio server e vorrei quindi elaborarlo in HTML normale. Per me è importante che ciò che appare su GitHub sia esattamente come dovrebbe cercare il mio sito web. Mi piacerebbe anche usare i blocchi recintati ~~~, quindi preferirei non usare solo la sintassi Markdown standard.

Ho esaminato un po 'l'anteprima live di JavaScript pensando di poterlo collegare a Node.js, ma dicono che è deprecato. Ho esaminato il repository redcarpet, ma non sembra che abbia un'interfaccia a riga di comando.

Ho lanciato la mia soluzione, tuttavia, poiché nessuna soluzione qui è chiaramente migliore delle altre, lascerò la domanda senza una risposta selezionata.


2
RE: AGGIORNAMENTO: Se aggiungessi un --outargomento per il grip da renderizzare in un file HTML anziché nel browser, sarebbe accettabile?
Joe

@Joe, per favore, aggiungi questa opzione!
Bguiz,

@McLeopold @bguiz ha appena distribuito l' --exportopzione, che rende GFM e i suoi stili in un singolo file. Questo risponde alla domanda?
Joe,

3
@McLeopold, Joe in un certo senso lo ha buttato fuori dal parco creando una semplice soluzione riutilizzabile, potrebbe voler dargli la risposta.
James McMahon,

1
Github stesso usa Sundown . Vedere stackoverflow.com/a/7694931/632951
Pacerier

Risposte:


447

Ho scritto una piccola CLI in Python e aggiunto il supporto GFM. Si chiama Grip (Github Readme Instant Preview) .

Installalo con:

$ pip install grip

E per usarlo, semplicemente:

$ grip

Quindi visita localhost:5000per visualizzare il readme.mdfile in quella posizione.

Puoi anche specificare il tuo file:

$ grip CHANGES.md

E cambia porta:

$ grip 8080

E, naturalmente, rende specificamente Markdown al gusto di GitHub, facoltativamente con il contesto del repository:

$ grip --gfm --context=username/repo issue.md

Caratteristiche notevoli:

  • Esegue il rendering delle pagine esattamente come su GitHub
  • Blocchi recintati
  • API Python
  • Naviga tra i file collegati (grazie, vladwing !) Aggiunti in 2.0
  • Esporta in un singolo file (grazie, iliggio !) Aggiunto in 2.0
  • Novità: leggi stdined esporta in stdout aggiunto in 3.0

Spero che questo aiuti qualcuno qui. Dai un'occhiata .


1
Funziona davvero bene e non puoi battere la facilità di installazione per Pythonistas!
RichVel

29
Questo dovrebbe essere un primo successo per "anteprima markdown github". Tutto il resto è complicato, non funziona o non funziona con tutte le funzionalità di GitHub. gripfunziona subito.
Bluu,

1
@Houdini Quel problema non è aggiornato. Flask supporta 3.3, vedi flask.pocoo.org/docs/python3 . Ecco un thread Github più recente sull'argomento github.com/mitsuhiko/flask/issues/587 . Se c'è un'altra dipendenza che deve essere aggiornata, sentiti libero di aprire un problema o una richiesta pull.
Joe,

3
Va notato che questo pacchetto richiede una connessione Internet attiva e le credenziali di autenticazione github (fornite nella riga di comando) se si eseguono più di 60 aggiornamenti all'ora.
leo

13
Come accennato in precedenza, non penso che questa sia una soluzione particolarmente eccezionale perché tutto ciò che fa va a Github e fa in modo che Github renda il tuo Markdown. Richiede una connessione Internet funzionante con accesso a Github e se Github muore, questo strumento smette di funzionare. Preferirei avere una soluzione completamente offline.
Jez,

114

Non ho trovato un metodo rapido e semplice per Markdown al gusto di GitHub, ma ho trovato una versione leggermente più generica: Pandoc . Converte da / in un numero di formati, tra cui Markdown, Rest, HTML e altri.

Ho anche sviluppato un Makefileper convertire tutti i file .md in .html (in gran parte nell'esempio in Writing, Markdown e Pandoc ):

# 'Makefile'
MARKDOWN = pandoc --from gfm --to html --standalone
all: $(patsubst %.md,%.html,$(wildcard *.md)) Makefile

clean:
    rm -f $(patsubst %.md,%.html,$(wildcard *.md))
    rm -f *.bak *~

%.html: %.md
    $(MARKDOWN) $< --output $@

4
sto usando "watch pandoc ..." per convertire continuamente un file markdown in html, e l'estensione cromata "live reload" per ottenere in tempo reale la funzionalità "resta dove sto scorrendo anch'io" con questo, e funziona benissimo . chrome.google.com/webstore/detail/livereload/…
Brad Parks

1
Pandoc legge bene GFM ma non genera lo stesso GitHub HTML, ad esempio se hai un <pre/>tag multi-linea nel tuo sorgente GFM, Pandoc inserirà i <br/>tag per le interruzioni di riga, mentre il renderer di GitHub, sebbene si spoglia in testa agli spazi bianchi, altrimenti sembra lasciare solo il contenuto.
David Moles,

1
Come si fa a ottenere uno stile piacevole sull'HTML risultante? Il mio output è ancora reso con Times New Roman, per esempio.
Sviluppatore olistico,

Le istruzioni di installazione di Pandoc sono qui . Su macOS:brew install pandoc
Master of Ducks

1
né il gfmné i markdown_githubformati di input rendono correttamente cose come blocchi di codice.
user5359531

29

Forse questo potrebbe aiutare:

gem install github-markdown

Non esiste documentazione, ma l'ho preso dalla documentazione di Gollum . Guardando rubydoc.info , sembra che tu possa usare:

require 'github/markdown'  
puts GitHub::Markdown.render_gfm('your markdown string')

nel tuo codice Ruby. Puoi avvolgerlo facilmente in uno script per trasformarlo in un'utilità della riga di comando:

#!/usr/bin/env ruby

# render.rb
require 'github/markdown'

puts GitHub::Markdown.render_gfm File.read(ARGV[0])

Eseguilo con ./render.rb path/to/my/markdown/file.md. Si noti che questo non è sicuro per l'uso in produzione senza sanificazione.


1
Grazie Jim, a causa di esempi praticamente inesistenti, ero bloccato nel passaggio richiesto (sostituendo il trattino con la barra fatta) ..;)
plesatejvlk,

Questo è fantastico se stai già utilizzando NPM. Ho dovuto usarlo, a causa del fatto che DOxygen mi causava costanti problemi con markdown specificamente aromatizzato al github + esportazione in HTML.
kayleeFrye_onDeck

è in esecuzione localmente o sta inviando dati all'API GitHub?
user5359531

28
pip3 install --user markdown
python3 -m markdown readme.md > readme.html

Non gestisce le estensioni GitHub, ma è meglio di niente. Credo che tu possa estendere il modulo per gestire le aggiunte di GitHub.


1
/ usr / bin / python: markdown è un pacchetto e non può essere eseguito direttamente
Kazimieras Aliulis

2
Semplice output HTML senza tag di fantasia.
Halil Kaskavalci,

23

Probabilmente non quello che vuoi, ma da quando hai menzionato Node.js: non sono riuscito a trovare un buon strumento per visualizzare in anteprima la documentazione Markdown aromatizzato GitHub sul mio disco locale prima di inviarli a GitHub, quindi oggi ne ho creato uno, basato su Node.js: https : //github.com/ypocat/gfms

Quindi forse puoi riutilizzare showdown.js da esso per il tuo Wiki, se la tua domanda è ancora effettiva. In caso contrario, forse altre persone che affrontano lo stesso problema che ho riscontrato troveranno (proprio come ho fatto io) questa domanda e questa risposta.


Ben fatto, amico. Mi evita di dover ricorrere a Ruby o Python quando scrivo un'applicazione nodo, il che è fantastico.
jedd.ahyoung,

19

Per leggere un file README.md nel terminale che uso:

pandoc README.md | lynx -stdin

Pandoc lo emette in formato HTML, che Lynx rende nel tuo terminale.

Funziona benissimo: riempie il mio terminale, le scorciatoie sono mostrate di seguito, posso scorrere e i collegamenti funzionano! Tuttavia, esiste solo una dimensione del carattere, ma i colori + rientro + allineamento lo compensano.

Installazione:

sudo apt-get install pandoc lynx

1
La domanda riguarda in particolare l'utilizzo della riga di comando. Prima di scrivere il tuo script ruby ​​(o egad node server), prova questo.
Cora Middleton,

Esattamente funziona all'interno del tuo terminale. O se il tuo browser preferito (desktop?) Può accedere a quella cartella pandoc readme.md -o readme.md.htmle aprire il file risultante.
Barry Staes,

@ baerry-staes Sì, scusami, spero fosse chiaro che la tua era la mia risposta preferita.
Cora Middleton,

@JustinMiddleton sì, l'ho capito, grazie. Il mio commento è stato solo per aggiungere alcune informazioni extra per gli utenti desktop .. ho pensato che qualcuno un giorno leggendo questo potrebbe trovarlo utile.
Barry Staes,

1
Ho provato circa 5-6 altri lettori di console md e questa è stata di gran lunga la soluzione migliore. Ho appena aggiunto la funzione più semplice alla mia configurazione per renderla un po 'più veloce da usare. function md { pandoc $@ | lynx -stdin }
Russ Brown,

17

GitHub ha un'API Markdown che puoi usare.


5
jq --slurp --raw-input '{"text": "\(.)", "mode": "markdown"}' < README.md | curl --data @- https://api.github.com/markdown > README.html
Vebjorn Ljosa,

@VebjornLjosa * che * o grip... Hai scelto. : P
yyny,

13

Usa contrassegnato . Supporta GitHub Flavored Markdown, può essere usato come modulo Node.js e dalla riga di comando.

Un esempio potrebbe essere:

$ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>

1
Ho notato che questo non supporta funzionalità come l'evidenziazione della sintassi per blocchi di codice e funzionalità più recenti come le liste di controllo. Ma ehi, arriva quasi tutto!
Bguiz,

Molto bello, l'unica cosa che mi manca sono alcuni bordi per i tavoli. Beh, almeno posso renderli affatto, questo è praticamente esattamente ciò di cui ho bisogno. Pipe in GFM, pipe HTML :)
Xandaros

Sono confuso su questo esempio, che cos'è ^D?
Matteo,

10

Questo è principalmente un seguito alla risposta di @ barry-staes per l'utilizzo di Pandoc . Anche Homebrew ce l'ha, se sei su un Mac:

brew install pandoc

Pandoc supporta GFM come formato di input tramite il markdown_githubnome.

Uscita su file

cat foo.md | pandoc -f markdown_github > foo.html

Apri in Lynx

cat foo.md | pandoc -f markdown_github | lynx -stdin # To open in Lynx

Apri nel browser predefinito su OS X

cat foo.md | pandoc -f markdown_github > foo.html && open foo.html # To open in the default browser on OS X`

Integrazione TextMate

Puoi sempre reindirizzare la selezione corrente o il documento corrente a uno dei precedenti, come la maggior parte degli editor ti consente di fare. È inoltre possibile configurare facilmente l'ambiente in modo che pandocsostituisca il processore Markdown predefinito utilizzato dal pacchetto Markdown .

Innanzitutto, crea uno script di shell con i seguenti contenuti (lo chiamerò ghmarkdown):

#!/bin/bash
# Note included, optional --email-obfuscation arg
pandoc -f markdown_github --email-obfuscation=references

È quindi possibile impostare la TM_MARKDOWNvariabile (in Preferenze → Variabili) su /path/to/ghmarkdowne sostituirà il processore Markdown predefinito.


10

Ho creato uno strumento simile alla funzionalità Anteprima di Atom, ma come applicazione autonoma. Non sono sicuro se questo è quello che stai cercando, ma potrebbe essere utile. - https://github.com/yoshuawuyts/vmd

VMD


Ragazzi, lo state ancora sostenendo? Ho provato a installare con NPM oggi, ma nessun dado. > download di electron-v0.36.9-win32-x64.zip> Errore: certificato autofirmato
kayleeFrye_onDeck

1
Sì, lo siamo! Su quale versione di npm / node hai eseguito questo? - sentiti libero di aprire un problema su GH e daremo un'occhiata a questo. Grazie!
Yoshua Wuyts

8

pandoccon browserfunziona bene per me.

Uso: cat README.md | pandoc -f markdown_github | browser

Installazione (Supponendo che tu stia utilizzando Mac OSX):

  • $ brew install pandoc

  • $ brew install browser

O su Debian / Ubuntu: apt-get install pandoc browser


1
apt-get isntall pandocfarà, non c'è bisogno di usare cose locali non sicure come la birra.
Dominik George,

1
@DominikGeorge c'è un errore di battitura, è installato , non è completo
Federico Tomassetti,

11
@DominikGeorge non c'è apt-get su macOS.
Richrad,

6

Vedi anche https://softwareengineering.stackexchange.com/a/128721/24257 .


Se sei interessato al modo in cui [Github] esegue il rendering dei file Markdown, potresti provare Redcarpet , la nostra interfaccia Ruby per la libreria Sundown.

Ruby-script, che utilizza Redcarpet , sarà "utility da riga di comando", se avrai Ruby locale


Non ho idee - Non scrivo Ruby e non ho letto fonti di Redcarpet
Lazy Badger

@LazyBadger, Sundown è il parser effettivo (scritto in C). Redcarpet non è necessario.
Pacerier,

6

Sulla base di questo commento, ho scritto una riga per colpire l' API Github Markdown usando curle jq.

Incolla questa funzione bash nella riga di comando o nel tuo ~/.bash_profile:

mdsee(){ 
    HTMLFILE="$(mktemp -u).html"
    cat "$1" | \
      jq --slurp --raw-input '{"text": "\(.)", "mode": "markdown"}' | \
      curl -s --data @- https://api.github.com/markdown > "$HTMLFILE"
    echo $HTMLFILE
    open "$HTMLFILE"
}

E quindi per visualizzare l'esecuzione HTML nel browser renderizzata:

mdsee readme.md

Sostituire open "$HTMLFILE"con lynx "$HTMLFILE"se è necessaria una soluzione terminale pura.


4

GitHub ha (da allora) sviluppato un piacevole editor di testo modulare chiamato Atom (basato su Chromium e utilizza Node.js moduli per i pacchetti).

Un pacchetto preinstallato predefinito Anteprima del menu a discesa consente di visualizzare l'anteprima in una scheda separata utilizzando Ctrl+ Shift+M .

Non ho testato la sua sintassi completa, ma poiché proviene da GitHub, sarei molto sorpreso se la sintassi dell'anteprima fosse diversa dalla loro (blocchi recintati che utilizzano ~~~ lavoro).

Ora, sebbene non sia tecnicamente basato sulla riga di comando, utilizza Node.js e restituisce un renderer basato su DOM , il che potrebbe aiutare chiunque cerchi di eseguire il rendering di HTML basato sulla sintassi GitHub su un server web basato su Node.js o semplicemente modificarla / suo README.md offline.


1
In Atom puoi installare un pacchetto chiamato gfm-pdf ( atom.io/packages/gfm-pdf ), che esporta il tuo documento markdown in un documento HTML e / o PDF. È richiesta la libreria wkhtmltopdf .
spren9er,


3

Esiste uno strumento davvero piacevole e semplice per sfogliare i documenti Markdown di GFM:

GFMS - Server di markdown aromatizzato Github

È un server HTTP semplice e leggero (nessuna configurazione necessaria) che puoi avviare in qualsiasi directory contenente file markdown per sfogliarli.

Caratteristiche:

  • Pieno supporto Markdown GFM
  • Evidenziazione della sintassi del codice sorgente
  • Navigazione di file e directory
  • Output piacevole (e fogli di stile CSS configurabili)
  • Esporta in PDF

3

Sono riuscito a utilizzare uno script Ruby di una riga per quello scopo (anche se doveva andare in un file separato). Innanzitutto, esegui questi comandi una volta su ogni macchina client da cui invierai documenti da:

gem install github-markup
gem install commonmarker

Quindi, installa questo script nell'immagine client e chiamalo render-readme-for-javadoc.rb:

require 'github/markup'

puts GitHub::Markup.render_s(GitHub::Markups::MARKUP_MARKDOWN, File.read('README.md'))

Infine, invocalo in questo modo:

ruby ./render-readme-for-javadoc.rb >> project/src/main/javadoc/overview.html

ETA: Questo non ti aiuterà con StackOverflow-sapore Markdown, che sembra fallire in questa risposta.


Penso che questa sia la risposta "più vicina alla fonte" da parte di tutti, poiché questi strumenti sono quelli utilizzati da Github.
memoselyk,

3

Uso Pandoc con l'opzione --from=gfmper GitHub Flavored Markdown in questo modo:

$ pandoc my_file.md   --from=gfm -t html -o my_file.html

Con Pandoc 1.16.0.2 su Linux Mint 18 ottengo un errore: pandoc: Unknown reader: gfm. Andare a 2.2.1 risolve questo problema.
Kidmose,

L'ho provato con Pandoc 2.1.2.
Asme Solo il

come installare 2.2.1 su ubuntu?
Alexander Mills,

@AlexanderMills Hai provato sudo apt install pandoc?
Asme Solo il

2

Miglioramento della soluzione di @ barry-stae. Inserisci questo snippet in ~ / .bashrc

function mdviewer(){
  pandoc $* | lynx -stdin
}

Quindi possiamo visualizzare rapidamente il file dalla riga di comando. Funziona bene anche su sessioni SSH / Telnet.

mdviewer README.md

2

Aggiunta tardiva ma showdownjs ha uno strumento CLI che puoi usare per analizzare MD in HTML.


1

Ho trovato un sito Web che lo farà per te: http://tmpvar.com/markdown.html . Incolla il tuo Markdown e lo mostrerà per te. Sembra funzionare bene!

Tuttavia, non sembra gestire l'opzione di evidenziazione della sintassi per il codice; cioè, la ~~~rubyfunzione non funziona. Stampa solo 'rubino'.


tmpvar non sembra migliorare la versione di GFM come le tabelle
Greg,

0

Migliorando le risposte di @ barry-stae e @Sandeep per gli utenti regolari di elink, aggiungerebbe a .bashrc:

function mdviewer() {
  pandoc $* | elinks --force-html
}

Non dimenticare di installare pandoc (ed elinks).


0

Sulla base della risposta di Jim Lim , ho installato la gemma GitHub Markdown. Ciò includeva uno script chiamato gfm che accetta un nome file dalla riga di comando e scrive l'HTML equivalente nell'output standard. L'ho modificato leggermente per salvare il file su disco e quindi per aprire il browser standard con Launchy:

#!/usr/bin/env ruby

HELP = <<-help
  Usage: gfm [--readme | --plaintext] [<file>]
  Convert a GitHub-Flavored Markdown file to HTML and write to standard output.
  With no <file> or when <file> is '-', read Markdown source text from standard input.
  With `--readme`, the files are parsed like README.md files in GitHub.com. By default,
  the files are parsed with all the GFM extensions.
help

if ARGV.include?('--help')
  puts HELP
  exit 0
end

root = File.expand_path('../../', __FILE__)
$:.unshift File.expand_path('lib', root)

require 'github/markdown'
require 'tempfile'
require 'launchy'

mode = :gfm
mode = :markdown if ARGV.delete('--readme')
mode = :plaintext if ARGV.delete('--plaintext')

outputFilePath = File.join(Dir.tmpdir, File.basename(ARGF.path))  + ".html"

File.open(outputFilePath, "w") do |outputFile |
    outputFile.write(GitHub::Markdown.to_html(ARGF.read, mode))
end

outputFileUri = 'file:///' + outputFilePath

Launchy.open(outputFileUri)

1
L'ho provato con blocchi recintati per Ruby e Cucumber. Mentre le recinzioni ( ruby, cetriolo, ecc.) Sembrano essere riconosciute come recinzioni (perché sono rese in testo a larghezza fissa), non c'è evidenziazione della sintassi. Qualche idea sul perché?
Keith Bennett,

0

Un approccio 'rapido e sporco' è quello di scaricare le pagine HTML della wiki usando l' wgetutilità, invece di clonarla. Ad esempio, è così che ho scaricato il wiki di Hystrix da GitHub (sto usando Ubuntu Linux):

 $ wget -e robots=off -nH -E -H -k -K -p https://github.com/Netflix/Hystrix/wiki
 $ wget -e robots=off -nH -E -H -k -K -I "Netflix/Hystrix/wiki" -r -l 1 https://github.com/Netflix/Hystrix/wiki

La prima chiamata scaricherà la pagina di entrata della wiki e tutte le sue dipendenze. Il secondo chiamerà tutte le sottopagine su di esso. Puoi sfogliare ora il wiki aprendoNetflix/Hystrix/wiki.1.html .

Si noti che entrambe le chiamate wgetsono necessarie. Se esegui solo la seconda, perderai alcune dipendenze necessarie per mostrare correttamente le pagine.


-1

Di recente ho realizzato quello che volevi, perché avevo bisogno di generare documentazione dai file Markdown e lo stile GitHub è piuttosto carino. Provalo. È scritto in Node.js.

GFM


Lo so, il modulo non è stato ascoltato per 9 mesi, perché declassate un vecchio post?
Gabriel Llamas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.