是否有一个命令行实用工具可以渲染GitHub风格的Markdown?

456

我想知道是否有一个命令行实用程序可以将GitHub flavored Markdown文件渲染为HTML。

我正在使用GitHub wiki创建网站内容。 我已经在我的服务器上克隆了存储库,然后想将其处理为常规HTML。 对我来说,重要的是在GitHub上显示的内容与我的网站上的内容完全一样。 我也非常想使用带有~~~的围栏块,因此我不想仅使用标准Markdown语法。

我研究了一下JavaScript实时预览,以为可以将其连接到Node.js,但他们说它已被弃用。 我看了一下redcarpet存储库,但它似乎没有命令行界面。

我自己开发了一个解决方案,但由于这里没有明显优于其他解决方案的解决方案,所以我会将问题留在没有选定答案的状态。


2
回复:更新:如果我给grip添加一个“--out”参数,以便将渲染输出到HTML文件而不是浏览器,这样是否可以接受? - Joe
1
@McLeopold @bguiz 刚刚部署了 --export 选项,它将 GFM 及其样式渲染为单个文件。这回答了你的问题吗? - Joe
@Joe,好的,我会去看看! - bguiz
3
@McLeopold,Joe通过创建一个简单可重用的解决方案成功地完成了这项工作,你可能想要接受他的答案。 - James McMahon
1
Github本身使用Sundown。请参见https://dev59.com/D2sz5IYBdhLWcg3wuKe7#7694931。 - Pacerier
显示剩余6条评论
26个回答

10

pandocbrowser结合使用对我来说效果很好。

用法: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 install pandoc进行安装,无需使用不安全的本地软件如brew。 - Dominik George
1
@DominikGeorge,这里有一个错别字,应该是_install_,而不是_isntall_。 - Federico Tomassetti
11
在 macOS 上没有 apt-get 命令。 - richrad
我在想这个 browser 是什么 - 它只是一个 shell 脚本,用于创建一个临时的 html 文件,然后调用系统浏览器打开此文件;https://formulae.brew.sh/formula/browser 指向 https://gist.github.com/defunkt/318247,其中包含该脚本。 - sdbbs

9

我使用Pandoc,并选择--from=gfm选项来处理类似于GitHub风格的Markdown:

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

在Linux Mint 18上使用Pandoc 1.16.0.2时,我遇到了一个错误:pandoc: Unknown reader: gfm。升级到2.2.1版本可以解决这个问题。 - kidmose
我使用 Pandoc 2.1.2 进行了测试。 - Asme Just
如何在Ubuntu上安装2.2.1版本? - Alexander Mills
@AlexanderMills 你试过 sudo apt install pandoc 吗? - Asme Just

9

基于这条评论,我编写了一个一行命令的脚本,使用curljq调用Github Markdown API

将此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"

6

没有想法 - 我不写Ruby,也没有阅读Redcarpet的源代码。 - Lazy Badger
@LazyBadger,Sundown 是实际的解析器(用 C 编写)。不需要 Redcarpet。 - Pacerier
这可能是最好的解决方案,但您没有提供实际操作指南。因此,在安装了gem gem install redcarpet之后,假设我们在包含README.md的目录中,接下来该怎么做? - stevec

4

有一个非常好用且简单的工具可以浏览GFM Markdown文档:

GFMS - Github Flavored Markdown Server

它是一个简单而轻量级的HTTP服务器,您可以在任何包含Markdown文件的目录中启动它来浏览这些文件(无需配置)。

功能:

  • 完全支持GFM Markdown
  • 源代码语法高亮
  • 浏览文件和目录
  • 漂亮的输出(并可配置CSS样式表)
  • 导出为PDF

4
GitHub开发了一个名为Atom的漂亮模块化文本编辑器(基于Chromium,使用Node.js模块进行包装)。
默认预装的Markdown Preview包允许您使用Ctrl+Shift+M在单独的选项卡中显示预览。
虽然我没有测试过其完整语法,但由于它来自GitHub,如果预览的语法与他们的不同,我会非常惊讶(使用~~~的围栏块有效)。
现在,虽然它不是技术上基于命令行的,但它使用Node.js并输出到基于DOM的渲染器,这可能有助于任何试图在基于Node.js的Web服务器上呈现GitHub语法的HTML,或者只是离线编辑她/他的README.md的人。

1
在 Atom 中,您可以安装一个名为 _gfm-pdf_(https://atom.io/packages/gfm-pdf)的软件包,它将您的 Markdown 文档导出为 HTML 和/或 PDF 文档。需要使用库 _wkhtmltopdf_。 - spren9er

4

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

注:这并不适用于 StackOverflow 风格的 Markdown,因为似乎在此答案上失败了。


我认为这是所有答案中“最接近源代码”的答案,因为这些工具是GitHub使用的工具。 - memoselyk

3
晚期添加,但showdownjs有一个CLI工具,您可以使用它将MD解析为HTML。

2
将@barry-stae的解决方案改善一下。将这段代码片段放置在~/.bashrc中。
function mdviewer(){
  pandoc $* | lynx -stdin
}

然后我们可以在命令行快速查看文件。这也可用于SSH/Telnet会话。

mdviewer README.md

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接