GitHub aromalı Markdown'ı oluşturmak için bir komut satırı yardımcı programı var mı?


414

GitHub aromalı Markdown dosyasını alıp HTML'ye dönüştürmek için bir komut satırı yardımcı programı olup olmadığını merak ediyorum .

Web sitesi içeriği oluşturmak için GitHub wiki kullanıyorum. Sunucumdaki havuzu klonladım ve daha sonra normal HTML olarak işlemek istiyorum. GitHub'da görünen şeyin web sitemi tam olarak nasıl araması gerektiği benim için önemli. Ayrıca çitlerle çevrili blokları da ~~~kullanmak istiyorum, bu yüzden sadece standart Markdown sözdizimini kullanmak istemem.

Biraz JavaScript canlı önizleme Node.js içine kanca olabilir düşündüm baktım, ama itiraz olduğunu söylüyorlar. Redcarpet deposuna baktım, ama bir komut satırı arayüzü varmış gibi görünmüyor.

Kendi çözümümü yuvarladım, ancak buradaki hiçbir çözüm diğerlerinden açıkça daha iyi olmadığından, soruyu seçilen bir cevap olmadan bırakacağım.


2
RE: GÜNCELLEME: --outTarayıcı yerine bir HTML dosyasına işlemek için kavrama argümanı eklersem, bu kabul edilebilir mi?
Joe

@ Lütfen bu seçeneği ekleyin!
bguiz

@McLeopold @bguiz --export, GFM ve stillerini tek bir dosyaya dönüştüren seçeneği konuşlandırdı . Bu soruya cevap veriyor mu?
Joe

3
@McLeopold, Joe basit bir yeniden kullanılabilir çözüm oluşturarak bunu parktan çıkardı, ona cevap vermek isteyebilir.
James McMahon

1
Github kendisi Sundown kullanıyor . Bkz. Stackoverflow.com/a/7694931/632951
Pacerier

Yanıtlar:


447

Python'a küçük bir CLI yazdım ve GFM desteği ekledim. Buna Grip (Github Benioku Anında Önizleme) denir .

Şununla yükle:

$ pip install grip

Ve kullanmak için, basitçe:

$ grip

Ardından localhost:5000, readme.mddosyayı o konumda görüntülemek için adresini ziyaret edin .

Ayrıca kendi dosyanızı da belirleyebilirsiniz:

$ grip CHANGES.md

Ve bağlantı noktasını değiştirin:

$ grip 8080

Ve elbette, özellikle isteğe bağlı olarak depo bağlamıyla GitHub-Flavored Markdown'ı oluşturun:

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

Dikkate değer özellikler:

  • Sayfaları tam olarak GitHub'da görünecek şekilde oluşturur
  • Çitlerle çevrili bloklar
  • Python API'sı
  • 2.0'da eklenen bağlantılı dosyalar (teşekkürler, vladwing !) Arasında gezinin
  • Tek bir dosyaya dışa aktar (teşekkürler, iliggio !) 2.0'da eklendi
  • Yeni: 3.0 'da okuyun stdinve dışa aktarınstdout

Umarım buradaki birine yardımcı olur. Şuna bir bak .


1
Gerçekten iyi çalışıyor ve Pythonistas için kurulum kolaylığını yenemezsiniz!
RichVel

29
Bu "github markdown önizleme" için ilk hit olmalı. Diğer her şey karmaşıktır, çalışmaz veya GitHub'ın tüm özelliklerini yapmaz. gripkutudan çıkar çıkmaz çalışır.
Bluu

1
@Houdini Bu sorun güncel değil. Flask 3.3'ü destekliyor, bkz. Flask.pocoo.org/docs/python3 . İşte github.com/mitsuhiko/flask/issues/587 konusundaki daha yeni bir Github dizisi . Güncellenmesi gereken başka bir bağımlılık varsa, bir sorun veya çekme isteği açmaktan çekinmeyin.
Joe

3
Saatte 60'dan fazla yenileme gerçekleştirirseniz, bu paketin aktif bir internet bağlantısı ve github kimlik doğrulama kimlik bilgileriniz (komut satırında sağlanan) gerektirdiği unutulmamalıdır.
leo

13
Daha önce de belirtildiği gibi, bunun özellikle harika bir çözüm olduğunu düşünmüyorum, çünkü tüm yaptığı şey Github'a gidiyor ve Github'u Markdown'unuzu oluşturuyor. Github'a erişimi olan çalışan bir internet bağlantısı gerektirir ve Github ölürse bu araç çalışmayı durdurur. Tamamen çevrimdışı bir çözüm olmasını tercih ederim.
Jez

114

GitHub aromalı Markdown için hızlı ve kolay bir yöntem bulamadım, ancak biraz daha genel bir sürüm buldum - Pandoc . Markdown, Rest, HTML ve diğerleri de dahil olmak üzere bir dizi biçime / biçiminden dönüştürür.

Ayrıca Makefiletüm .md dosyalarını .html'ye dönüştürmek için geliştirdim (büyük ölçüde Yazma, Markdown ve Pandoc'taki örneğe ):

# '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
Ben bir markdown dosyasını html'ye dönüştürmek için "watch pandoc ..." kullanıyorum ve krom "canlı yeniden yükleme" uzantısı gerçek zamanlı "ben de kaydırıldığım yerde kal" almak için işlevsellik ve harika çalışıyor . chrome.google.com/webstore/detail/livereload/…
Brad Parks

1
Pandoc, GFM'yi iyi okuyor ancak GitHub'ın yaptığı HTML'yi oluşturmuyor - örneğin, <pre/>GFM kaynağınızda çok satırlı bir etiket varsa , Pandoc <br/>, satır kesmeleri için etiketleri yerleştirirken, GitHub'ın oluşturucusu önde gelen boşlukları kaldırır, aksi halde içeriği yalnız bırakır gibi görünür.
David Moles

1
Ortaya çıkan HTML üzerinde güzel bir stil elde etmek nasıl yapılır? Örneğin çıktılarım Times New Roman ile hâlâ işleniyor.
Holistic Developer

Pandoc kurulum talimatları burada . MacOS'ta:brew install pandoc
Master of Ducks

1
ne girdi biçimleri gfmne de markdown_githubkod blokları gibi şeyleri doğru şekilde oluşturmaz.
user5359531

29

Belki bu yardımcı olabilir:

gem install github-markdown

Hiçbir dokümantasyon yok, ama gollum dokümantasyonundan aldım . Rubydoc.info'ya bakarak, kullanabileceğiniz gibi görünüyor:

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

Ruby kodunuzda. Komut satırı yardımcı programına dönüştürmek için bunu bir komut dosyasına kolayca sarabilirsiniz:

#!/usr/bin/env ruby

# render.rb
require 'github/markdown'

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

İle çalıştırın ./render.rb path/to/my/markdown/file.md. Bunun sterilizasyon olmadan üretimde kullanım için güvenli olmadığını unutmayın.


1
Teşekkürler Jim, neredeyse varolmayan örnekler nedeniyle, ben gerekli adımda takıldı (çizgi eğik çizgi yerine) ..;)
plesatejvlk

Zaten NPM kullanıyorsanız bu harika. Bunu kullanmak zorundayım, DOxygen nedeniyle bana özellikle github aromalı markdown + HTML'ye dışa aktarma ile sürekli sorunlara neden oldu.
kayleeFrye_onDeck

bu yerel olarak mı çalışıyor yoksa GitHub API'sına veri mi gönderiyor?
user5359531

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

GitHub uzantılarını işlemez, ancak hiç yoktan iyidir. Modülü GitHub eklemelerini işleyecek şekilde genişletebileceğinize inanıyorum.


1
/ usr / bin / python:
markdown

2
Süslü etiketi olmayan basit HTML çıktısı.
Halil Kaskavalci

23

Muhtemelen istediğiniz şey değil, ama Node.js'den bahsettiğinizden beri, GitHub'a teslim etmeden önce yerel sürücümde GitHub Aromalı Markdown belgelerini önizlemek için iyi bir araç bulamadım, bu yüzden bugün Node.js tabanlı bir tane oluşturdum: https : //github.com/ypocat/gfms

Belki de sorunuz hala geçerliyse, showiki.js'yi Wiki'niz için tekrar kullanabilirsiniz. Değilse, belki benimle aynı problemle karşı karşıya olan diğer insanlar (aynı benim yaptığım gibi) bu soruyu ve bu cevabı bulacaklardır.


Aferin dostum. Harika bir düğüm uygulaması yazarken Ruby veya Python'a başvurmak zorunda kalmamı sağlıyor.
jedd.ahyoung

19

Kullandığım terminalde bir README.md dosyasını okumak için:

pandoc README.md | lynx -stdin

Pandoc, Lynx'in terminalinizde oluşturduğu HTML biçiminde çıktılar.

Harika çalışıyor: Terminalimi dolduruyor, kısayollar aşağıda gösteriliyor, kaydırılabilir ve bağlantılar çalışıyor! Bununla birlikte sadece bir yazı tipi boyutu vardır, ancak renkler + girinti + hizalama bunu oluşturur.

Kurulum:

sudo apt-get install pandoc lynx

1
Soru özellikle komut satırı kullanımı ile ilgilidir. Kendi yakut betiğinizi (veya egad düğüm sunucunuzu) yazmadan önce, bunu deneyin.
Cora Middleton

Tam olarak terminalinizde çalışır. Veya en sevdiğiniz (masaüstü?) Tarayıcınız bu klasör kullanımına erişip pandoc readme.md -o readme.md.htmlsonuçta ortaya çıkan dosyayı açabilirse.
Barry Staes

@ baerry-staes Evet, özür dilerim, umarım senin cevabın benim cevabım olduğu açıktı.
Cora Middleton

@ JustinMiddleton evet anladım, teşekkür ederim. Benim yorum sadece masaüstü kullanıcıları için bazı ekstra bilgi eklemek oldu .. ben bir gün bu yararlı bulabiliriz okuma biri düşündüm.
Barry Staes

1
Yaklaşık 5-6 diğer konsol md okuyucuları denedim ve bu bugüne kadar en iyi çözüm oldu. Ben sadece biraz daha hızlı yapmak için benim yapılandırma en temel işlevi ekledi. function md { pandoc $@ | lynx -stdin }
Russ Brown

17

GitHub'ın kullanabileceğiniz bir Markdown API'sı vardır .


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

@VebjornLjosa * that * or grip... Sen seçtin. : P
yyny

13

İşaretli kullanın . GitHub Aromalı İşaretlemeyi destekler, Node.js modülü olarak ve komut satırından kullanılabilir.

Örnek olarak şunlar verilebilir:

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

1
Bunun kod blokları için sözdizimi vurgulama gibi özellikleri ve kontrol listeleri gibi daha yeni özellikleri desteklemediğini fark ettim. Ama hey yolun çoğunu alır!
bguiz

Çok güzel, eksik olduğum tek şey tablolar için bazı sınırlar. En azından onları hiç render edebilirim, bu tam olarak ihtiyacım olan şey. GFM Boru, HTML dışarı boru :)
Xandaros

Bu örnekle kafam karıştı, nedir ^D?
Matthew

10

Bu çoğunlukla bir izleme üzerinde kullanmak için Barry-STAES cevabı @ etmektir Pandoc . Bir Mac kullanıyorsanız Homebrew'da da var:

brew install pandoc

Pandoc, GFM'yi markdown_github adıyla .

Dosyaya çıktı

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

Lynx'te

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

OS X'te varsayılan tarayıcıda aç

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

TextMate Entegrasyonu

Çoğu düzenleyicinin yapmasına izin verdiği için, geçerli seçimi veya geçerli belgeyi her zaman yukarıdakilerden birine bağlayabilirsiniz. Ayrıca pandoc, Markdown tarafından kullanılan varsayılan Markdown işlemcisinin yerini alacak şekilde ortamı kolayca yapılandırabilirsiniz paketi .

İlk olarak, aşağıdaki içeriklerle bir kabuk betiği oluşturun (onu arayacağım ghmarkdown):

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

Daha sonra TM_MARKDOWNdeğişkeni (Tercihler → Değişkenler'de) olarak ayarlayabilirsiniz /path/to/ghmarkdown; varsayılan Markdown işlemcisinin yerini alacaktır.


10

Atom'un Önizleme işlevine benzer, ancak bağımsız bir uygulama olarak bir araç oluşturdum. Aradığınız şeyin bu olduğundan emin değilim, ancak yardımcı olabilir. - https://github.com/yoshuawuyts/vmd

vmd


Siz hala bunu destekliyor musunuz? Bugün NPM ile yüklemeye çalıştım, ama zar yok. > electron-v0.36.9-win32-x64.zip indiriliyor> Hata: kendinden imzalı sertifika
kayleeFrye_onDeck

1
Evet, öyleyiz! Bunu hangi npm / düğüm sürümünde çalıştırdınız? - GH ile ilgili bir sorun açmaktan çekinmeyin, buna bir göz atacağız. Teşekkürler!
Yoshua Wuyts

8

pandocile browserbenim için iyi işler.

Kullanımı: cat README.md | pandoc -f markdown_github | browser

Kurulum (Mac OSX kullandığınızı varsayarsak):

  • $ brew install pandoc

  • $ brew install browser

Veya Debian / Ubuntu'da: apt-get install pandoc browser


1
apt-get isntall pandocdemlemek gibi güvensiz, yerel şeyler kullanmaya gerek yok.
Dominik George

1
@DominikGeorge bir yazım hatası var, kurulum değil, isntall
Federico

11
@DominikGeorge macOS'ta uygun bir çözüm yok.
richrad

6

Ayrıca bkz. Https://softwareengineering.stackexchange.com/a/128721/24257 .


Markdown dosyalarını nasıl [Github] oluşturduğumuzla ilgileniyorsanız , Sundown kütüphanesine Ruby arayüzümüz Redcarpet'i kontrol etmek isteyebilirsiniz .

Yerel Ruby'niz varsa , Redcarpet kullanan Ruby komut dosyası "komut satırı yardımcı programı" olacaktır


Fikirler yok - Ruby yazmıyorum ve Redcarpet kaynaklarını okumadım
Lazy Badger

@LazyBadger, Sundown gerçek ayrıştırıcıdır (C ile yazılmış). Redcarpet gerekli değildir.
Pacerier

6

Bu yoruma dayanarak Github Markdown API'sını kullanarak tek satırlık bir yazı yazdım curlvejq .

Bu bash işlevini komut satırına veya komut satırınıza yapıştırın ~/.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"
}

Ardından, oluşturulan HTML'nin tarayıcı içi çalışmasını görmek için:

mdsee readme.md

Değiştir open "$HTMLFILE"ile lynx "$HTMLFILE"Saf bir terminal çözümü gerekiyorsa.


4

GitHub (o zamandan beri) Atom adlı güzel bir modüler metin editörü geliştirdi (Chromium'a dayanıyor ve Node.js kullanıyor) paketler modüllerini ).

Önceden yüklenmiş varsayılan paket Markdown Preview , Ctrl+ Shift+ kullanarak önizlemenizi ayrı bir sekmede görüntülemenizi sağlarM .

Tam sözdizimini test etmedim, ancak GitHub'dan geldiğinden, önizlemenin sözdiziminin kendisinden farklı olması durumunda çok şaşırırdım (çit blokları kullanarak ~~~ iş ).

Şimdi, teknik olarak komut satırı tabanlı olmasa da, Node.js kullanır ve bir DOM tabanlı bir oluşturucuya , bu da GitHub sözdizimi tabanlı HTML'yi Node.js tabanlı bir web sunucusunda oluşturmaya veya sadece onu düzenlemeye yardımcı olabilir. / README.md çevrimdışı.


1
Atom'a , işaretleme belgenizi HTML ve / veya PDF belgesine aktaran gfm-pdf ( atom.io/packages/gfm-pdf ) adlı bir paket yükleyebilirsiniz . Wkhtmltopdf kütüphanesi gereklidir.
spren9er


3

GFM Markdown belgelerine göz atmak için gerçekten güzel ve basit bir araç var:

GFMS - Github Aromalı Markdown Sunucusu

Basit ve hafif (yapılandırmaya gerek yok) HTTP sunucusu, göz atmak için işaretleme dosyaları içeren herhangi bir dizinden başlayabilirsiniz.

Özellikleri:

  • Tam GFM Markdown desteği
  • Kaynak kodu sözdizimi vurgulama
  • Dosyalara ve dizinlere göz atma
  • Güzel görünen çıktı (ve yapılandırılabilir CSS stil sayfaları)
  • PDF'ye dışa aktar

3

Bu amaçla tek satırlık bir Ruby komut dosyası kullanmayı başardım (ayrı bir dosyaya gitmesine rağmen). İlk olarak, bu komutları dokümanı göndereceğiniz her istemci makinede bir kez çalıştırın:

gem install github-markup
gem install commonmarker

Ardından, bu komut dosyasını istemci görüntünüze yükleyin ve arayın render-readme-for-javadoc.rb:

require 'github/markup'

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

Son olarak, şu şekilde çağırın:

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

ETA: Bu, bu yanıtta başarısız gibi görünen StackOverflow-flavor Markdown ile size yardımcı olmaz.


Bu araçların github tarafından kullanılanlar olduğu için hepsinin "kaynağa en yakın" yanıtı olduğunu düşünüyorum.
memoselyk

3

Pandoc'u şu şekilde --from=gfmGitHub Aromalı Markdown seçeneği ile kullanıyorum :

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

Linux nane 18 Pandoc 1.16.0.2 ile bir hata alıyorum: pandoc: Unknown reader: gfm. 2.2.1 sürümüne geçmek bunu düzeltir.
kidmose

Pandoc 2.1.2 ile test ettim.
Asme Just

Ubuntu üzerinde 2.2.1 nasıl kurulur?
Alexander Mills

@AlexanderMills Denediniz mi sudo apt install pandoc?
Asme Sadece

2

@ Barry-stae çözümü geliştirildi. Bu pasajı ~ / .bashrc içine yapıştır

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

Sonra dosyayı komut satırından hızlıca görüntüleyebiliriz. Ayrıca SSH / Telnet oturumlarında da iyi çalışır.

mdviewer README.md

2

Geç ekleme ancak showdownjs MD'yi HTML'yi ayrıştırmak için kullanabileceğiniz bir CLI aracına sahiptir.


1

Bunu sizin için yapacak bir web sitesi buldum: http://tmpvar.com/markdown.html . Markdown'ınıza yapıştırın, sizin için gösterecektir. Sadece iyi çalışıyor gibi görünüyor!

Ancak, kod için sözdizimi vurgulama seçeneğini işlemiyor gibi görünmüyor; yani ~~~rubyözellik çalışmaz. Sadece 'yakut' basar.


tmpvar tablolar gibi GFM sürüm geliştirmeleri yapmıyor gibi görünüyor
Greg

0

Düzenli elinks kullanıcıları için @ barry-stae ve @Sandeep cevaplarını geliştirerek .bashrc'ye aşağıdakileri eklersiniz:

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

Pandoc (ve elinks) kurmayı unutmayın.


0

Jim Lim'in cevabına dayanarak GitHub Markdown gemisini kurdum. Bu, komut satırında bir dosya adı alan ve eşdeğer HTML'yi standart çıktıya yazan gfm adlı bir komut dosyası içeriyordu. Dosyayı diske kaydetmek ve ardından standart tarayıcıyı başlatma ile açmak için biraz değiştirdim:

#!/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
Bunu Ruby ve Salatalık için çitle çevrili bloklarla denedim. Çitler ( ruby, salatalık, vb.) Çit olarak tanınıyor gibi görünse de (sabit genişlikli metinde oluşturuldukları için), sözdizimi vurgulaması yoktur. Neden olduğu hakkında bir fikrin var mı?
Keith Bennett

0

'Hızlı ve kirli' bir yaklaşım, wiki HTML sayfalarını wgetklonlamak yerine yardımcı programı kullanarak indirmektir . Örneğin, GitHub'dan Hystrix wiki'yi şu şekilde indirdim ( Ubuntu Linux kullanıyorum ):

 $ 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

İlk arama, wiki giriş sayfasını ve tüm bağımlılıklarını indirir. İkincisi, üzerindeki tüm alt sayfaları arayacaktır. Şimdi açarak wikiye göz atabilirsinizNetflix/Hystrix/wiki.1.html .

Her iki çağrının wgetda gerekli olduğunu unutmayın . Sadece ikincisini çalıştırırsanız, sayfaları düzgün bir şekilde göstermek için gereken bazı bağımlılıkları kaçırırsınız.


-1

Son zamanlarda ne istersen yaptım, çünkü Markdown dosyalarından belge üretmem gerekiyordu ve GitHub stili oldukça güzel. Dene. Node.js'de yazılmıştır.

GFM


Biliyorum, modül 9 aydır kullanılmadı, neden eski bir gönderiyi indiriyorsun?
Gabriel Llamas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.