是否存在用于渲染GitHub风格的Markdown的命令行实用程序?


414

我想知道是否存在用于获取GitHub风格的Markdown文件并将其呈现为HTML 的命令行实用程序。

我正在使用GitHub Wiki创建网站内容。我已经在服务器上克隆了存储库,然后希望将其处理为常规HTML。对我来说重要的是,GitHub上显示的正是它应如何查找我的网站。我也非常想将带围栏的块与一起使用~~~,所以我宁愿不只使用标准的Markdown语法。

我研究了JavaScript实时预览,以为可以将其挂接到Node.js中,但他们说它已被弃用。我看过redcarpet信息库,但看起来好像没有命令行界面。

我提出了自己的解决方案,但是,由于这里没有任何一种解决方案明显比其他解决方案更好,因此我将在没有选择答案的情况下回答问题。


2
RE:更新:如果我添加了一个--out参数,使其可以渲染为HTML文件而不是浏览器,那可以接受吗?

@Joe请添加该选项!
bguiz

@McLeopold @bguiz刚刚部署了该--export选项,该选项将GFM及其样式呈现为单个文件。这会回答问题吗?
2013年

3
@McLeopold,乔通过创建一个简单的可重复使用的解决方案将其从公园中淘汰了,可能想给他答案。
James McMahon

1
Github本身使用Sundown。请参阅stackoverflow.com/a/7694931/632951
Pacerier,

Answers:


447

我用Python编写了一个小型CLI,并添加了GFM支持。它称为Grip(Github自述文件即时预览)

通过以下方式安装:

$ pip install grip

要使用它,只需:

$ grip

然后访问localhost:5000readme.md在该位置查看文件。

您还可以指定自己的文件:

$ grip CHANGES.md

并更改端口:

$ grip 8080

当然,当然也可以使用存储库上下文来呈现GitHub Flavorred Markdown:

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

显着特点:

  • 渲染页面看起来与GitHub上的完全一样
  • 围栏
  • Python API
  • 在2.0中添加的链接文件之间导航(谢谢,vladwing!)
  • 导出到2.0中添加的单个文件(感谢iliggio!)
  • 新增:在3.0中读取stdin和导出以stdout 添加

希望这对这里的人有所帮助。检查一下


1
效果非常好,Pythonistas的安装无与伦比!
RichVel 2013年

29
这应该是“ github markdown预览”的第一击。其他所有事情都很复杂,无法正常运行,或者无法完成所有GitHub功能。grip开箱即用。
Bluu 2013年

1
@Houdini这个问题已经过时了。Flask支持3.3,请参见flask.pocoo.org/docs/python3。这是关于主题github.com/mitsuhiko/flask/issues/587的更新的Github线程。如果还有另一个需要更新的依赖项,请随时提出问题或请求请求。

3
应该注意的是,如果您每小时进行超过60次刷新,则此软件包需要有效的Internet连接和github身份验证凭据(在命令行中提供)。
狮子座

13
如前所述,我认为这不是一个特别好的解决方案,因为它所做的全部交给Github,并让Github渲染您的Markdown。它需要能够访问Github的有效互联网连接,并且如果Github死了,那么此工具将停止工作。我宁愿有一个完全脱机的解决方案。
2015年

114

我还没有找到一种适用于GitHub风格的Markdown的快速简便的方法,但是我发现了一个稍微通用的版本-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 ...”来连续将markdown文件转换为html,并且使用chrome“ live reload”扩展程序来实时获取“停留在我也滚动的位置”功能,并且效果很好。chrome.google.com/webstore/detail/livereload/…–
布莱德·帕克斯

1
Pandoc可以很好地读取GFM,但不会生成与GitHub相同的HTML-例如,如果您<pre/>的GFM源中有多行标签,则Pandoc会<br/>在其中插入换行符的标签,而GitHub的渲染器它去除了前导空格,似乎使内容独自一人。
David Moles

1
如何在得到的HTML上获得漂亮的样式?例如,我的输出仍然使用Times New Roman渲染。
整体开发人员

Pandoc安装说明在这里。在macOS上:brew install pandoc
鸭子大师

1
既不gfm也不是markdown_github输入格式正确呈现之类的东西的代码块。
user5359531 19-10-29

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 2015年

如果您已经在使用NPM,那就太好了。我不得不使用它,因为DOxygen导致我不断出现问题,特别是github风格的markdown +导出到HTML。
kayleeFrye_onDeck

它是在本地运行还是将数据发送到GitHub API?
user5359531 19-10-29

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

它不处理GitHub扩展,但总比没有好。我相信您可以扩展该模块以处理GitHub的添加。


1
/ usr / bin / python:markdown是一个软件包,不能直接执行
Kazimieras Aliulis 2014年

2
没有花哨标签的简单HTML输出。
Halil Kaskavalci 2015年

23

可能不是您想要的,但因为您提到了Node.js:在将它们提交到GitHub之前,我找不到在本地驱动器上预览GitHub Flavored Markdown文档的好工具,因此今天我基于Node.js创建了一个文档:https ://github.com/ypocat/gfms

因此,如果您的问题仍然存在,也许您可​​以将其中的showdown.js重新用于Wiki。如果不是这样,也许其他与我一样面临同样问题的人会(和我一样)找到这个问题及其答案。


干得好,伙计。使我不必在编写节点应用程序时求助于Ruby或Python,这很棒。
jedd.ahyoung,2015年

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 }
罗斯·布朗

17

GitHub有您可以使用的Markdown API


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

@VebjornLjosa *那是*或grip...您选择了。:P
yyny

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 2014年

我对此示例感到困惑,这是^D什么?
马修

10

这主要是@ barry-staes使用Pandoc的答案的后续。如果您使用的是Mac,Homebrew也有它:

brew install pandoc

Pandoc通过markdown_github名称支持GFM作为输入格式。

输出到文件

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处理器。

首先,创建一个包含以下内容的shell脚本(我将其称为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,但没有骰子。>正在下载电子版
v0.36.9-win32-x64.zip

1
是的,我们是!您在哪个版本的npm / node上运行它?-随时提出有关GH的问题,我们将对此进行研究。谢谢!
Yoshua Wuyts

8

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 isntall pandoc就能做到,无需使用不安全的本地酿造物。
多米尼克·乔治

1
@DominikGeorge有一个错字,它是安装,不是isntall
Federico Tomassetti 16-10-18

11
@DominikGeorge在macOS上没有apt-get。
richrad '16

6

另请参阅https://softwareengineering.stackexchange.com/a/128721/24257


如果您对[Github]渲染Markdown文件的方式感兴趣,则可能需要查看Redcarpet,这是我们与Sundown库的Ruby接口。

如果您拥有本地Ruby,则使用Redcarpet的 Ruby脚本将成为“命令行实用程序”


没有想法-我不写Ruby和我没看过隆重的接待来源
懒惰獾

@ LazyBadger,Sundown是实际的解析器(用C编写)。不需要红地毯。
Pacerier '16

6

此评论的基础上,我编写了一个代码行,使用和来访问Github Markdown APIcurljq

将此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的渲染器,这可能会帮助任何尝试在基于Node.js的网络服务器上渲染基于GitHub语法的HTML的人,或者只是对其进行编辑/ hi README.md脱机。


1
在Atom中,您可以安装一个名为gfm-pdf的软件包(atom.io/packages/gfm-pdf),该软件包会将您的markdown文档导出为HTML和/或PDF文档。库wkhtmltopdf是必需的。
spren9er


3

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

GFMS-Github风味Markdown服务器

它简单,轻巧(无需配置),您可以在任何包含markdown文件的目录中启动以进行浏览的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使用的工具。
memoselyk

3

我将Pandoc与--from=gfmGitHub Flavored 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?
亚历山大·米尔斯

@AlexanderMills您尝试了sudo apt install pandoc吗?
阿斯梅

2

改进@ barry-stae的解决方案。将此代码段粘贴到〜/ .bashrc中

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

然后,我们可以从命令行快速查看文件。通过SSH / Telnet会话也可以很好地工作。

mdviewer README.md


1

我找到了一个可以为您做到这一点的网站:http : //tmpvar.com/markdown.html。粘贴到Markdown中,它将为您显示。看来一切正常!

但是,它似乎没有处理代码的语法高亮选项;也就是说,该~~~ruby功能不起作用。它只是打印“红宝石”。


tmpvar似乎没有像表那样执行GFM版本增强功能
Greg

0

为elink普通用户改善@ barry-stae和@Sandeep答案,您可以在.bashrc中添加以下内容:

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

不要忘记安装pandoc(和elink)。


0

根据Jim Lim的回答,我安装了GitHub Markdown gem。其中包括一个名为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

“快速而肮脏”的方法是使用wget实用程序下载Wiki HTML页面,而不是克隆它。例如,这是我从GitHub下载Hystrix Wiki的方式(我正在使用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

第一次调用将下载Wiki入口页面及其所有依赖项。第二个将调用其上的所有子页面。您现在可以通过打开来浏览Wiki Netflix/Hystrix/wiki.1.html

请注意,这两个调用wget都是必需的。如果您仅运行第二个页面,那么您将错过正确显示页面所需的一些依赖项。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.