Есть ли утилита командной строки для рендеринга GitHub со вкусом Markdown?


414

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

Я использую вики GitHub для создания контента сайта. Я клонировал репозиторий на своем сервере и хотел бы обработать его в обычном HTML. Для меня важно, что то, что появляется на GitHub, именно так и должно выглядеть для моего сайта. Я также хотел бы использовать огороженные блоки с ~~~, поэтому я бы предпочел не использовать только стандартный синтаксис Markdown.

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

Я накатил свое собственное решение, однако, поскольку ни одно решение здесь явно не лучше, чем другие, я оставлю вопрос без выбранного ответа.


2
RE: ОБНОВЛЕНИЕ: если бы я добавил --outаргумент в grip для рендеринга в файл HTML вместо браузера, это было бы приемлемо?
Джо

@ Джо, пожалуйста, добавь эту опцию!
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
  • Огороженные блоки
  • Python API
  • Навигация между связанными файлами (спасибо, vladwing !) Добавлена ​​в 2.0
  • Экспорт в один файл (спасибо, iliggio !) Добавлен в 2.0
  • Новое: чтение stdinи stdout добавление в 3.0.

Надеюсь, это поможет кому-то здесь. Проверьте это .


1
Работает очень хорошо, и вы не можете превзойти простоту установки для Pythonistas!
RichVel

29
Это должно быть первым хитом для «предварительного просмотра уценки github». Все остальное сложно, не работает или не выполняет все функции GitHub. gripработает прямо из коробки.
Bluu

1
@Houdini Эта проблема устарела. Flask поддерживает 3.3, см. Flask.pocoo.org/docs/python3 . Вот более свежая ветка Github по теме github.com/mitsuhiko/flask/issues/587 . Если есть другая зависимость, требующая обновления, не стесняйтесь открыть вопрос или запрос на извлечение.
Джо

3
Следует отметить, что для этого пакета требуется активное подключение к Интернету и ваши учетные данные для аутентификации на github (предоставляются в командной строке), если вы выполняете более 60 обновлений в час.
Лев

13
Как упоминалось ранее, я не думаю, что это особенно хорошее решение, потому что все, что он делает, отправляется на Github и заставляет Github визуализировать ваш Markdown. Требуется работающее интернет-соединение с доступом к Github, и если Github умирает, этот инструмент перестает работать. Я предпочел бы иметь полностью автономное решение.
Еж

114

Я не нашел быстрого и простого метода для Markdown со вкусом GitHub, но нашел немного более общую версию - Pandoc . Он конвертирует из / в ряд форматов, включая Markdown, Rest, 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 для получения в реальном времени функциональности «оставайся там, где меня прокручивают», и это прекрасно работает , chrome.google.com/webstore/detail/livereload/…
Брэд Паркс,

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

1
Как можно получить хорошее оформление результирующего HTML? Например, мой вывод все еще отображается с помощью Times New Roman.
Целостный разработчик

Инструкции по установке Pandoc находятся здесь . На macOS:brew install pandoc
Мастер уток

1
ни форматы ввода, gfmни markdown_githubвходные форматы правильно не отображают такие вещи, как блоки кода.
user5359531

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
Благодаря Джиму, из-за практически несуществующих примеров, я застрял на этапе требуется (замена черты с косой чертой сделала это ..;)
plesatejvlk

Это замечательно, если вы уже используете NPM. Мне пришлось использовать его из-за того, что DOxygen вызывал у меня постоянные проблемы со специфической уценкой github + экспорт в HTML.
kayleeFrye_onDeck

это работает локально или отправляет данные в GitHub API?
user5359531

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

Он не обрабатывает расширения GitHub, но это лучше, чем ничего. Я считаю, что вы можете расширить модуль для обработки дополнений GitHub.


1
/ usr / bin / python: разметка является пакетом и не может быть выполнена напрямую
Kazimieras Aliulis

2
Простой вывод HTML без причудливых тегов.
Халил Каскавальцы

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
Вопрос конкретно об использовании командной строки. Прежде чем писать свой собственный скрипт ruby ​​(или сервер узла egad), сделайте это.
Кора Миддлтон

Именно это работает внутри вашего терминала. Или, если ваш любимый (настольный?) Браузер может получить доступ к этой папке, использовать pandoc readme.md -o readme.md.htmlи открыть полученный файл.
Барри Стейс

@ baerry-staes Да, извините, я надеюсь, было ясно, что ваш был моим любимым ответом.
Кора Миддлтон

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

1
Я пробовал около 5-6 других консольных md-ридеров, и это было лучшим решением. Я просто добавил самую основную функцию в мою конфигурацию, чтобы сделать ее немного быстрее в использовании. function md { pandoc $@ | lynx -stdin }
Расс Браун


13

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

Примером может быть:

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

1
Я заметил, что это не поддерживает такие функции, как подсветка синтаксиса для блоков кода и новые функции, такие как контрольные списки. Но эй, это проходит большую часть пути!
bguiz

Очень хорошо, единственное, чего мне не хватает - это какие-то границы для таблиц. Ну, по крайней мере, я могу сделать их вообще, это почти то, что мне нужно. Труба в GFM,
трубач

Я запутался в этом примере, что это ^D?
Мэтью

10

В основном это продолжение ответа @ barry-staes за использование Pandoc . У Homebrew это также есть, если вы на Mac:

brew install pandoc

Pandoc поддерживает GFM в качестве формата ввода через markdown_githubимя.

Вывод в файл

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

Открыть в рыси

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, но как отдельное приложение. Не уверен, что это то, что вы ищете, но это может быть полезно. - https://github.com/yoshuawuyts/vmd

VMD


Вы, ребята, все еще поддерживаете это? Я попытался установить с NPM сегодня, но без игры в кости. > загрузка Electron-v0.36.9-win32-x64.zip> Ошибка: самозаверяющий сертификат
kayleeFrye_onDeck

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
Федерико Томассетти

11
@DominikGeorge нет ничего подходящего для macOS.
Ричрад

6

Также см. Https://softwareengineering.stackexchange.com/a/128721/24257 .


Если вы заинтересованы в том, как мы [Github] визуализируем файлы Markdown, вы можете попробовать Redcarpet , наш интерфейс Ruby для библиотеки Sundown.

Ruby-скрипт, использующий Redcarpet , будет «утилитой командной строки», если у вас будет локальный Ruby


Понятия не имею - я не пишу Ruby и я не читал источники Redcarpet
Lazy Badger

@LazyBadger, Sundown - это фактический парсер (написанный на C). Красный карпет не нужен.
Pacerier

6

Основываясь на этом комментарии, я написал однострочник, чтобы поразить Github Markdown API, используя 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, я был бы очень удивлен, если бы синтаксис предварительного просмотра отличался от их (огражденные блоки используют ~~~work).

Теперь, хотя технически он не основан на командной строке, он использует 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 - 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: Это не поможет вам с Markdown StackOverflow-flavour, который, похоже, не отвечает этому ответу.


Я думаю, что это самый близкий к источнику ответ из всех, поскольку эти инструменты используются github.
memoselyk

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.
Asme Just

как установить 2.2.1 на Ubuntu?
Александр Миллс

@AlexanderMills Вы пробовали sudo apt install pandoc?
Asme Just

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, такие как таблицы
Greg

0

Улучшая ответы @ barry-stae и @Sandeep для обычных пользователей elinks, вы добавили бы следующее .bashrc:

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

Не забудьте установить pandoc (и elinks).


0

Основываясь на ответе Джима Лима , я установил гем GitHub Markdown. Это включало скрипт gfm, который принимает имя файла в командной строке и записывает эквивалентный HTML в стандартный вывод. Я немного изменил это, чтобы сохранить файл на диск, а затем открыть стандартный браузер с помощью 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
Я пробовал это с огороженными блоками для Ruby и Cucumber. Хотя заборы ( ruby, огурцы и т. Д.), По-видимому, распознаются как заборы (поскольку они отображаются в тексте с фиксированной шириной), подсветка синтаксиса отсутствует. Есть идеи почему?
Кит Беннетт

0

Подход «быстрый и грязный» заключается в загрузке HTML-страниц вики с помощью 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.