Чи є утиліта командного рядка для рендерингу Markdown з ароматом GitHub?


414

Мені цікаво, чи є утиліта командного рядка для прийняття ароматизованого файлу Markdown та додавання його до HTML у GitHub .

Я використовую вікі GitHub для створення вмісту веб-сайту. Я клонував сховище на своєму сервері і хотів би потім обробити його в звичайний HTML. Мені важливо, що те, що з’являється на GitHub, саме так має виглядати на моєму веб-сайті. Я також дуже хотів би використовувати огороджені блоки з ~~~, тому я краще не використовувати тільки стандартний синтаксис Markdown.

Я трохи заглянув у попередній перегляд JavaScript, думаючи, що можу підключити його до Node.js, але вони кажуть, що це застаріло. Я переглянув сховище redcarpet, але не схоже, що він має інтерфейс командного рядка.

Однак я прокатував власне рішення, оскільки жодне рішення тут не є кращим, ніж інші, я залишаю питання без обраної відповіді.


2
RE: ОНОВЛЕННЯ: Якщо я додав --outаргумент для зчеплення, щоб візуалізувати файл HTML замість браузера, чи було це прийнятним?
Джо

@Joe, будь ласка, додайте цю опцію!
bguiz

@McLeopold @bguiz просто розгорнув --exportопцію, яка передає GFM та його стилі в один файл. Чи відповідає це на питання?
Джо

3
@McLeopold, Джо наче вибив це з парку, створивши просте рішення для багаторазового використання, можливо, захоче дати йому відповідь.
Джеймс Макмахон

1
Сам Github використовує Sundown . Див stackoverflow.com/a/7694931/632951
Pacerier

Відповіді:


447

Я написав невеликий CLI в Python і додав підтримку GFM. Це називається Grip (Github Readme Instant Preview) .

Встановіть його за допомогою:

$ pip install grip

І використовувати його просто:

$ grip

Потім перейдіть, localhost:5000щоб переглянути readme.mdфайл у цьому місці.

Ви також можете вказати власний файл:

$ grip CHANGES.md

І змінити порт:

$ grip 8080

І звичайно, спеціально надайте GitHub-Flavored Markdown, необов'язково з контекстом сховища:

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

Помітні функції:

  • Сторінки відображаються так, як на GitHub
  • Огороджені блоки
  • API Python
  • Перемістіться між пов'язаними файлами (дякую, vladwing !) , Доданими в 2.0
  • Експорт до одного файлу (дякую, iliggio !) , Доданого в 2.0
  • Нове: читання stdinта експорт до stdout доданого в 3.0

Сподіваюся, це допомагає комусь тут. Перевірте це .


1
Працює дуже добре, і ви не можете перемогти простоту встановлення для Pythonistas!
RichVel

29
Це має бути першим хітом для "попереднього перегляду розмітки github". Все інше складне, не працює або не виконує всі функції GitHub. gripпрацює прямо з коробки.
Блу

1
@Houdini Це питання застаріло. Flask підтримує версію 3.3, див. Flask.pocoo.org/docs/python3 . Ось новіша тема Github на тему github.com/mitsuhiko/flask/isissue/587 . Якщо є інша залежність, яку потрібно оновити, не соромтесь відкривати проблему чи запит на тягнення.
Джо

3
Слід зазначити, що цей пакет вимагає активного підключення до Інтернету та ваших облікових даних для аутентифікації github (надаються в командному рядку), якщо ви робите більше 60 оновлень на годину.
лео

13
Як згадувалося раніше, я не думаю, що це особливо чудове рішення, оскільки все, що він робить, йде на Github і змушує Github віддати ваш Markdown. Для нього потрібне робоче інтернет-з'єднання з доступом до Github, і якщо Github помер, то цей інструмент перестане працювати. Я вважаю за краще повністю офлайн-рішення.
Джез

114

Я не знайшов швидкий і простий метод для ароматизованого GitHub Markdown, але я знайшов трохи більш загальну версію - Pandoc . Він перетворює з / у ряд форматів, включаючи Markdown, відпочинок, HTML та інші.

Я також розробив Makefileдля перетворення всіх .md файлів у .html (значною мірою на приклад у Writing, Markdown та 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
я використовував "watch pandoc ..." для постійного перетворення розмічального файлу в HTML, а також хромоване розширення "live reload", щоб отримати в режимі реального часу функціональність "залишайтеся там, де я теж прокручується", і це чудово працює . chrome.google.com/webstore/detail/livereload/…
Бред Паркс

1
Pandoc читає GFM штрафом, але він не генерує той самий HTML GitHub - наприклад, якщо <pre/>у вашому джерелі GFM є багаторядковий тег, Pandoc вводить <br/>теги для розривів рядків у ньому, хоча рендерінг GitHub, хоча вона позбавляє простір пробілів, схоже, інакше залишає вміст у спокої.
Девід Молес

1
Як можна здобути приємний стиль на отриманому HTML? Наприклад, мій висновок відображається, наприклад, у Times New Roman.
Holistic Developer

Інструкції щодо встановлення Pandoc тут . На macOS:brew install pandoc
Майстер качок

1
ні формати вводу, gfmні markdown_githubвведення не вірно рендерують такі речі, як кодові блоки.
користувач5359531

29

Можливо, це може допомогти:

gem install github-markdown

Жодної документації не існує, але я отримав її з документації gollum . Переглядаючи rubydoc.info , схоже, ви можете використовувати:

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

у вашому коді Ruby. Ви можете легко зафіксувати це в сценарії, щоб перетворити його в утиліту командного рядка:

#!/usr/bin/env ruby

# render.rb
require 'github/markdown'

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

Виконайте це за допомогою ./render.rb path/to/my/markdown/file.md. Зауважте, що це не безпечно для використання у виробництві без санітарних заходів.


1
Дякую Джиму, через практично неіснуючі приклади, я застряг на кроці вимагання (замінивши тире на косу
рису

Це чудово, якщо ви вже використовуєте NPM. Мені довелося його використовувати, за рахунок DOxygen, що викликає у мене постійні проблеми із специфічною відміткою з ароматом github + експортом у HTML.
kayleeFrye_onDeck

це працює локально чи надсилає дані в API GitHub?
користувач5359531

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

Він не обробляє розширення GitHub, але це краще, ніж нічого. Я вважаю, що ви можете розширити модуль для обробки доповнень GitHub.


1
/ usr / bin / python: розмітка - це пакет, який не може бути безпосередньо виконаний
Kazimieras Aliulis

2
Просте виведення HTML без фантазійних тегів.
Halil Kaskavalci

23

Напевно, не те, що ви хочете, але оскільки ви згадали про Node.js: я не міг знайти хорошого інструменту для попереднього перегляду документації на GitHub Flavored Markdown на своєму локальному диску, перш ніж зробити їх GitHub, тому сьогодні я створив її на основі Node.js: https : //github.com/ypocat/gfms

Тож, можливо, ви можете повторно використовувати showdown.js з нього для своєї Wiki, якщо ваше питання все ще актуальне. Якщо ні, можливо, інші люди, що стикаються з тією ж проблемою, що і я, знайдуть (як і я) це питання і цю відповідь на нього.


Молодці, чоловіче. Врятує мене від необхідності вдаватися до Ruby або Python, коли я пишу заявку на вузол, що чудово.
jedd.ahyoung

19

Для читання файлу README.md в терміналі я використовую:

pandoc README.md | lynx -stdin

Pandoc виводить його у форматі HTML, який Lynx надає у вашому терміналі.

Це чудово працює: він заповнює мій термінал, ярлики показані нижче, я можу прокручувати, а посилання працюють! Хоча є лише один розмір шрифту, але кольори + відступ + вирівнювання це доповнюють.

Установка:

sudo apt-get install pandoc lynx

1
Питання стосується конкретно використання командного рядка. Перш ніж писати свій власний сценарій для рубіну (або сервер вузлів egad), спробуйте зробити це.
Кора Міддлтон

Саме це працює всередині вашого терміналу. Або якщо ваш улюблений (настільний?) Браузер може отримати доступ до цієї папки pandoc readme.md -o readme.md.htmlта відкрити отриманий файл.
Баррі Стейс

@ baerry-staes Так, вибачте, сподіваюся, було зрозуміло, що ваша відповідь була моїм прихильним.
Кора Міддлтон

@JustinMiddleton так, я зрозумів це, дякую. Мій коментар полягав лише в тому, щоб додати додаткову інформацію для користувачів настільних комп'ютерів .. Я подумав, що хтось колись, читаючи це, може вважати його корисним.
Баррі Стейс

1
Я спробував близько 5-6 інших читачів консольних дисків, і це, безумовно, найкраще рішення. Я тільки що додав до мого конфігурації основну функцію, щоб зробити її трохи швидшою у використанні. function md { pandoc $@ | lynx -stdin }
Russ Brown


13

Використовуйте позначене . Він підтримує GitHub Flavored Markdown, може використовуватися як модуль Node.js та з командного рядка.

Прикладом може бути:

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

1
Я помітив, що це не підтримує такі функції, як підсвічування синтаксису для блоків коду та новіші функції, такі як контрольні списки. Але ей це отримує більшу частину шляху!
bguiz

Дуже приємно, єдине, чого мені не вистачає, - це деякі межі для столів. Ну, принаймні, я можу їх взагалі віддати, це саме те, що мені потрібно. Труба в GFM, виводить HTML :)
Xandaros

Мене плутає цей приклад, що таке ^D?
Матвій

10

Це здебільшого відповідь на відповідь @ barry-staes щодо використання Pandoc . Homebrew має його також, якщо ви на Mac:

brew install pandoc

Pandoc підтримує GFM як формат введення через markdown_githubім'я.

Виведення у файл

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

Відкрито в Lynx

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

Відкрийте в браузері за замовчуванням на OS X

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

Інтеграція TextMate

Ви завжди можете передавати поточний вибір або поточний документ одному з вищезазначених, як це дозволяє більшість редакторів. Ви також можете легко налаштувати середовище так, щоб pandocзамінити процесор Markdown за замовчуванням, який використовує Markdown комплекті .

Спочатку створіть скрипт оболонки із наступним вмістом (я його назву ghmarkdown):

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

Потім ви можете встановити TM_MARKDOWNзмінну (у налаштуваннях → змінні) на /path/to/ghmarkdown, і вона замінить процесор Markdown за замовчуванням.


10

Я створив інструмент, аналогічний функціоналу Atom Preview, але як окремий додаток. Не впевнений, що це те, що ви шукаєте, але це може бути корисно. - https://github.com/yoshuawuyts/vmd

vmd


Ви все ще підтримуєте це? Я намагався сьогодні встановити NPM, але без кісток. > завантаження electron-v0.36.9-win32-x64.zip> Помилка: сертифікат
самопідписання

1
Так, ми! На якій версії npm / node ви запустили це? - не соромтеся відкривати випуск щодо GH, і ми розглянемо це. Дякую!
Йошуа Вуйтс

8

pandocз browserдобре працює для мене.

Використання: cat README.md | pandoc -f markdown_github | browser

Установка (якщо припустимо, що ви використовуєте Mac OSX):

  • $ brew install pandoc

  • $ brew install browser

Або на Debian / Ubuntu: apt-get install pandoc browser


1
apt-get isntall pandocбуде робити, не потрібно використовувати незахищені, місцеві речі, як варити.
Домінік Георгій

1
@DominikGeorge є друкарська помилка, вона встановлена , а не isntall
Federico Tomassetti

11
@DominikGeorge на macOS немає придатного доступу.
Richrad

6

Також дивіться https://softwareengineering.stackexchange.com/a/128721/24257 .


Якщо вас цікавить, як ми [Github] надаємо файли Markdown, ви можете перевірити Redcarpet , наш інтерфейс Ruby до бібліотеки Sundown.

Ruby-скрипт, який використовує Redcarpet , буде "утилітою командного рядка", якщо у вас буде місцевий Ruby


Не мав ідеї - я не пишу Рубі, і я не читав джерел Redcarpet
Lazy Badger

@LazyBadger, Sundown - це фактичний аналізатор (написаний на С). Червоний килим не потрібен.
Pacerier

6

Спираючись на цей коментар, я написав однолінійку, щоб потрапити на API Github Markdown за допомогою curlі jq.

Вставте цю функцію bash в командний рядок або у свій ~/.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"
}

А потім, щоб побачити відображений HTML у браузері:

mdsee readme.md

Замінити open "$HTMLFILE"з , lynx "$HTMLFILE"якщо вам потрібно чистим термінальним рішенням.


4

GitHub (з тих пір) розробив чудовий модульний текстовий редактор під назвою Atom (заснований на Chromium і використовує Node.js модулі для пакетів).

Попередньо встановлений пакет за замовчуванням Markdown Preview дозволяє відображати попередній перегляд на окремій вкладці за допомогою Ctrl+ Shift+M .

Я не перевірив його повний синтаксис, але оскільки він надходить від GitHub, я був би дуже здивований, якщо синтаксис попереднього перегляду відрізнявся від їх (огороджені блоки з використанням ~~~ роботу).

Тепер, хоча це не технічно на основі командного рядка, він використовує Node.js та видає рендерінг, заснований на DOM , що може допомогти будь-кому, хто намагається передати HTML-синтаксис GitHub на веб-сервері, що базується на Node.js, або просто відредагувати її / його README.md офлайн.


1
В Atom ви можете встановити пакет під назвою gfm-pdf ( atom.io/packages/gfm-pdf ), який експортує ваш розмітний документ у документ HTML та / або PDF. Потрібна бібліотека wkhtmltopdf .
Spren9er


3

Існує дійсно приємний і простий інструмент для перегляду документів GFM Markdown:

GFMS - сервер Markdown з ароматизованим сервісом Github

Це простий і легкий (не потрібна конфігурація) сервер HTTP, який ви можете запустити в будь-якому каталозі, що містить файли розмітки, для їх перегляду.

Особливості:

  • Повна підтримка GFM Markdown
  • Підсвічування синтаксису вихідного коду
  • Перегляд файлів та каталогів
  • Приємний вигляд (та настроювані таблиці стилів CSS)
  • Експорт у PDF

3

Мені вдалося використати для цієї мети однорядний сценарій Ruby (хоча це мусило перейти в окремий файл). Спочатку запустіть ці команди один раз на кожній клієнтській машині, на яку ви натискатимете документи:

gem install github-markup
gem install commonmarker

Далі встановіть цей скрипт у зображення вашого клієнта та зателефонуйте йому render-readme-for-javadoc.rb:

require 'github/markup'

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

Нарешті, викликайте це так:

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

ETA: Це не допоможе вам у застосуванні аромату StackOverflow Markdown, який, здається, не відповідає цій відповіді.


Я думаю, що це "найближчий до джерела" відповідь з усіх них, оскільки ці інструменти використовуються github.
мемоселик

3

Я використовую Pandoc з опцією --from=gfmдля GitHub Flavored Markdown так:

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

З pandoc 1.16.0.2 на Linux Mint 18 Я отримую повідомлення про помилку: pandoc: Unknown reader: gfm. Перехід до 2.2.1 виправляє це.
kidmose

Я перевірив його за допомогою Pandoc 2.1.2.
Асме Просто

як встановити 2.2.1 на ubuntu?
Олександр Міллз

@AlexanderMills Ви спробували sudo apt install pandoc?
Асме Просто

2

Поліпшення рішення @ barry-stae. Наклейте цей фрагмент у ~ / .bashrc

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

Тоді ми можемо швидко переглянути файл із командного рядка. Також добре працює під час сеансів SSH / Telnet.

mdviewer README.md

2

Пізнє додавання, але showdownjs має інструмент CLI, який можна використовувати для розбору MD на HTML.


1

Я знайшов веб-сайт, який зробить це за вас: http://tmpvar.com/markdown.html . Вставте свій Markdown, і він відобразить його вам. Здається, працює просто чудово!

Однак, схоже, це не обробляє параметр виділення синтаксису для коду; тобто ~~~rubyфункція не працює. Він просто друкує "рубін".


Здається, tmpvar не покращує версію GFM, як таблиці
Грег,

0

Удосконалюючи відповіді на @ barry-stae та @Sandeep для звичайних користувачів посилань, ви додасте наступне до .bashrc:

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

Не забудьте встановити pandoc (і посилання).


0

На основі відповіді Джима Ліма я встановив дорогоцінний камінь GitHub Markdown. Це включало скрипт під назвою gfm, який приймає ім'я файлу в командному рядку і записує еквівалентний HTML стандартному виводу. Я трохи змінив це, щоб зберегти файл на диску, а потім відкрити стандартний браузер із запуском:

#!/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
Я спробував це з огороженими блоками для Рубі та Огірка. Хоча огорожі ( ruby, огірок тощо), як видається, розпізнаються як огорожі (оскільки вони відображені в тексті фіксованої ширини), підсвічування синтаксису відсутнє. Будь-яка ідея чому?
Кіт Беннетт

0

"Швидкий і брудний" підхід полягає у завантаженні HTML-сторінок wiki за допомогою wgetутиліти, а не клонування. Наприклад, ось як я завантажив вікі Hystrix з GitHub (я використовую 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

Перший виклик завантажить сторінку вікі та всі його залежності. Друга буде називати всі підсторінки на ній. Тепер ви можете переглядати вікі, відкрившиNetflix/Hystrix/wiki.1.html .

Зверніть увагу, що обидва дзвінки wgetнеобхідні. Якщо ви просто запустите другу, то ви пропустите деякі залежності, необхідні для правильного відображення сторінок.


-1

Нещодавно я зробив те, що ви хочете, тому що мені потрібно було генерувати документацію з файлів Markdown, і стиль GitHub дуже приємний. Спробуй це. Це написано в Node.js.

gfm


Я знаю, що модуль не було скасовано за 9 місяців, чому ви зволікаєте на стару посаду?
Габріель Лламас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.