我想知道是否有用于获取 GitHub flavored Markdown 文件并将其呈现为 HTML 的命令行实用程序。
我正在使用 GitHub wiki 来创建网站内容。我已经在我的服务器上克隆了存储库,然后想将它处理成常规的 HTML。对我来说重要的是,出现在 GitHub 上的内容正是它应该如何查找我的网站。我也很想使用带有 ~~~
的围栏块,所以我宁愿不只使用标准的 Markdown 语法。
我对 JavaScript 实时预览进行了一些研究,认为我可以将其挂接到 Node.js 中,但他们说它已被弃用。我查看了 redcarpet 存储库,但它看起来没有命令行界面。
但是,我推出了自己的解决方案,因为这里没有任何解决方案明显比其他解决方案更好,所以我将在没有选择答案的情况下留下问题。
--out
参数来呈现到 HTML 文件而不是浏览器,这可以接受吗?
--export
选项,它将 GFM 及其样式呈现到单个文件中。这能回答问题吗?
我用 Python 编写了一个小型 CLI 并添加了 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
在 2.0 中添加的链接文件之间导航(感谢 vladwing!)
导出到 2.0 中添加的单个文件(感谢 iliggio!)
新增:从标准输入读取并导出到 3.0 中添加的标准输出
希望这可以帮助这里的人。 Check it out。
我还没有为 GitHub 风格的 Markdown 找到一种快速简便的方法,但我找到了一个更通用的版本 - Pandoc。它可以转换成多种格式,包括 Markdown、Rest、HTML 等。
我还开发了一个 Makefile
来将所有 .md 文件转换为 .html(主要是 Writing, Markdown and 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 $@
<pre/>
标签,Pandoc 将在其中放入 <br/>
标签用于换行,而 GitHub 的渲染器虽然去除了前导空格,但似乎不理会内容。
brew install pandoc
gfm
和 markdown_github
输入格式都不能正确呈现代码块之类的内容。
pip3 install --user markdown
python3 -m markdown readme.md > readme.html
它不处理 GitHub 扩展,但总比没有好。我相信您可以扩展该模块来处理 GitHub 添加的内容。
也许这可能会有所帮助:
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
执行它。请注意,如果不进行消毒,这对于在生产中使用是不安全的。
要在终端中读取 README.md 文件,我使用:
pandoc README.md | lynx -stdin
Pandoc 以 HTML 格式输出它,Lynx 在您的终端中呈现该格式。
效果很好:它填满了我的终端,快捷方式如下所示,我可以滚动浏览,并且链接有效!虽然只有一种字体大小,但颜色 + 缩进 + 对齐弥补了这一点。
安装:
apt: sudo apt-get install pandoc lynx
nix: nix-shell -p pandoc lynx
pandoc readme.md -o readme.md.html
并打开生成的文件。
function md { pandoc $@ | lynx -stdin }
可能不是你想要的,但既然你提到了 Node.js:在将它们提交到 GitHub 之前,我找不到一个好的工具来在我的本地驱动器上预览 GitHub Flavored Markdown 文档,所以今天我基于 Node.js 创建了一个:{ 1}
因此,如果您的问题仍然存在,也许您可以将其中的 showdown.js 重用于您的 Wiki。如果没有,也许其他面临与我相同问题的人会(就像我一样)找到这个问题和这个答案。
GitHub 有您可以使用的 a Markdown API。
jq --slurp --raw-input '{"text": "\(.)", "mode": "markdown"}' < README.md | curl --data @- https://api.github.com/markdown > README.html
grip
......你选择了。 :P
grip
太棒了。但是,不幸的是,由于它的名称,如果您忘记了它的命名方式,就不可能轻易找到它。 (也不能通过 MacPorts 获得)。
使用 marked。它支持 GitHub Flavored Markdown,可用作 Node.js 模块并从命令行使用。
一个例子是:
$ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>
^D
?
我创建了一个类似于 Atom 的预览功能的工具,但它是一个独立的应用程序。不确定这是否是您正在寻找的,但它可能会有所帮助。 -- https://github.com/yoshuawuyts/vmd
https://i.stack.imgur.com/eciJE.png
这主要是对@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
变量(在 Preferences→Variables 中)设置为 /path/to/ghmarkdown
,它将替换默认的 Markdown 处理器。
pandoc
和 browser
对我来说效果很好。
用法:cat README.md | pandoc -f markdown_github | browser
安装(假设您使用的是 Mac OSX):
$ 酿造安装 pandoc
$ brew 安装浏览器
或者在 Debian/Ubuntu 上:apt-get install pandoc browser
apt-get isntall pandoc
可以,无需使用 brew 等不安全的本地内容。
在 this comment 的基础上,我使用 curl
和 jq
编写了一个单行来击中 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"
。
我将 Pandoc 与选项 --from=gfm
一起用于 GitHub Flavored Markdown,如下所示:
$ pandoc my_file.md --from=gfm -t html -o my_file.html
pandoc: Unknown reader: gfm
。转到 2.2.1 解决了这个问题。
sudo apt install pandoc
吗?
另见https://softwareengineering.stackexchange.com/a/128721/24257。
如果您对我们 [Github] 如何渲染 Markdown 文件感兴趣,您可能想查看 Redcarpet,这是我们与 Sundown 库的 Ruby 接口。
如果您有本地 Ruby,则使用 Redcarpet 的 Ruby-script 将是“命令行实用程序”
gem install redcarpet
之后,假设我们在一个包含 README.md
的目录中,接下来会发生什么?
浏览 GFM Markdown 文档有一个非常好的和简单的工具:
GFMS - Github Flavored Markdown Server
它简单轻量(无需配置)HTTP 服务器,您可以在任何包含 markdown 文件的目录中启动以浏览它们。
特征:
完整的 GFM Markdown 支持
源代码语法高亮
浏览文件和目录
漂亮的输出(和可配置的 CSS 样式表)
导出为 PDF
GitHub(此后)开发了一个很好的模块化文本编辑器,称为 Atom(基于 Chromium 并使用 Node.js 模块进行包)。
默认的预安装包 Markdown Preview 允许您使用 Ctrl + Shift + M 在单独的选项卡中显示预览。
我还没有测试过它的完整语法,但由于它来自 GitHub,如果预览版的语法与他们的不同(使用 ~~~
工作的隔离块),我会感到非常惊讶。
现在,虽然它在技术上不是基于命令行的,但它使用 Node.js 并输出到基于 DOM 的渲染器,这可能有助于尝试在基于 Node.js 的网络服务器上渲染基于 GitHub 语法的 HTML,或者只是离线编辑她/他的 README.md。
为此,我设法使用了一个单行 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 没有帮助,这似乎在这个答案上失败了。
改进@barry-stae 的解决方案。将此代码段粘贴到 ~/.bashrc
function mdviewer(){
pandoc $* | lynx -stdin
}
然后我们可以从命令行快速查看文件。也可以通过 SSH/Telnet 会话很好地工作。
mdviewer README.md
我找到了一个可以为您执行此操作的网站:http://tmpvar.com/markdown.html。粘贴到您的 Markdown 中,它会为您显示它。它似乎工作得很好!
但是,它似乎没有处理代码的语法高亮选项;也就是说,~~~ruby
功能不起作用。它只是打印“红宝石”。
一种“快速而简单”的方法是使用 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 入口页面及其所有依赖项。第二个将调用它上面的所有子页面。您现在可以通过打开 Netflix/Hystrix/wiki.1.html
浏览 wiki。
请注意,对 wget
的两次调用都是必需的。如果您只运行第二个,那么您将错过一些正确显示页面所需的依赖项。
针对 elinks 的普通用户改进 @barry-stae 和 @Sandeep 的答案,您可以在 .bashrc 中添加以下内容:
function mdviewer() {
pandoc $* | elinks --force-html
}
不要忘记安装 pandoc(和 elinks)。
基于 Jim Lim's answer,我安装了 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)
ruby,
黄瓜等)似乎被识别为栅栏(因为它们以固定宽度的文本呈现),但没有语法突出显示。知道为什么吗?
另一个选项是 AllMark - markdown 服务器。
Docker 映像可用于即用型设置。
$ allmark serve .
注意:它递归地扫描目录以从降价文件服务网站。因此,为了更快地处理单个文件,请将其移至单独的目录。
我最近做了你想要的,因为我需要从 Markdown 文件生成文档,而且 GitHub 样式非常好。试试看。它是用 Node.js 编写的。
不定期副业成功案例分享
grip
开箱即用。