Чи є утиліта командного рядка для рендерингу 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.