ChatGPT解决这个技术问题 Extra ChatGPT

是否有用于呈现 GitHub 风格的 Markdown 的命令行实用程序?

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

我正在使用 GitHub wiki 来创建网站内容。我已经在我的服务器上克隆了存储库,然后想将它处理成常规的 HTML。对我来说重要的是,出现在 GitHub 上的内容正是它应该如何查找我的网站。我也很想使用带有 ~~~ 的围栏块,所以我宁愿不只使用标准的 Markdown 语法。

我对 JavaScript 实时预览进行了一些研究,认为我可以将其挂接到 Node.js 中,但他们说它已被弃用。我查看了 redcarpet 存储库,但它看起来没有命令行界面。

但是,我推出了自己的解决方案,因为这里没有任何解决方案明显比其他解决方案更好,所以我将在没有选择答案的情况下留下问题。

回复:更新:如果我添加一个 --out 参数来呈现到 HTML 文件而不是浏览器,这可以接受吗?
@Joe 请添加该选项!
@McLeopold @bguiz 刚刚部署了 --export 选项,它将 GFM 及其样式呈现到单个文件中。这能回答问题吗?
@McLeopold,Joe 通过创建一个简单的可重复使用的解决方案将其淘汰出局,可能想给他答案。
Github 本身使用 Sundown。请参阅stackoverflow.com/a/7694931/632951

P
Peter Mortensen

我用 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


工作得非常好,你无法击败 Pythonistas 的易于安装!
这应该是“github markdown preview”的第一次点击。其他一切都很复杂,不起作用,或者没有完成所有 GitHub 功能。 grip 开箱即用。
@Houdini那个问题已经过时了。 Flask 确实支持 3.3,请参阅 flask.pocoo.org/docs/python3。这是关于主题 github.com/mitsuhiko/flask/issues/587 的最新 Github 线程。如果还有其他依赖项需要更新,请随时打开问题或拉取请求。
应该注意的是,如果您每小时刷新超过 60 次,则此软件包需要有效的 Internet 连接和您的 github 身份验证凭据(在命令行中提供)。
如前所述,我不认为这是一个特别好的解决方案,因为它所做的所有事情都会转到 Github 并让 Github 呈现您的 Markdown。它需要一个可以访问 Github 的有效互联网连接,如果 Github 死了,那么这个工具就会停止工作。我宁愿有一个完全离线的解决方案。
D
Dale Wijnand

我还没有为 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 $@

我一直在使用“watch pandoc ...”来不断地将markdown文件转换为html,并使用chrome“live reload”扩展来获得实时的“留在我滚动的地方”功能,效果很好. chrome.google.com/webstore/detail/livereload/…
Pandoc 可以很好地读取 GFM,但它不会生成与 GitHub 相同的 HTML —— 例如,如果您的 GFM 源代码中有一个多行 <pre/> 标签,Pandoc 将在其中放入 <br/> 标签用于换行,而 GitHub 的渲染器虽然去除了前导空格,但似乎不理会内容。
如何在生成的 HTML 上获得漂亮的样式?例如,我的输出仍然使用 Times New Roman 渲染。
Pandoc 安装说明是 here。在 macOS 上:brew install pandoc
gfmmarkdown_github 输入格式都不能正确呈现代码块之类的内容。
G
Gringo Suave
pip3 install --user markdown
python3 -m markdown readme.md > readme.html

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


/usr/bin/python:markdown是一个包,不能直接执行
没有花哨标签的简单 HTML 输出。
严格来说,这是“John Gruber 的 Markdown”,而不是 GitHub 风格的 Markdown。
J
James Lim

也许这可能会有所帮助:

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 执行它。请注意,如果不进行消毒,这对于在生产中使用是不安全的。


谢谢吉姆,由于几乎不存在的例子,我被困在了要求步骤(用斜线替换破折号)..;)
如果您已经在使用 NPM,那就太好了。我不得不使用它,因为 DOxygen 导致我不断遇到问题,特别是 github 风格的降价 + 导出到 HTML。
这是在本地运行还是将数据发送到 GitHub API?
t
toraritte

要在终端中读取 README.md 文件,我使用:

pandoc README.md | lynx -stdin

Pandoc 以 HTML 格式输出它,Lynx 在您的终端中呈现该格式。

效果很好:它填满了我的终端,快捷方式如下所示,我可以滚动浏览,并且链接有效!虽然只有一种字体大小,但颜色 + 缩进 + 对齐弥补了这一点。

安装:

apt: sudo apt-get install pandoc lynx

nix: nix-shell -p pandoc lynx


这个问题专门关于命令行的使用。在编写自己的 ruby 脚本(或 egad 节点服务器)之前,先试一试。
正是这在您的终端内工作。或者,如果您最喜欢的(桌面?)浏览器可以访问该文件夹,请使用 pandoc readme.md -o readme.md.html 并打开生成的文件。
@baerry-staes 是的,对不起,我希望你的答案是我最喜欢的答案。
@JustinMiddleton 是的,我明白了,谢谢。我的评论只是为桌面用户添加一些额外的信息。我想有一天有人读到这篇文章可能会觉得它很有用。
我已经尝试了大约 5-6 个其他控制台 md 阅读器,这是迄今为止最好的解决方案。我只是在我的配置中添加了最基本的功能,以使其使用起来更快一些。 function md { pandoc $@ | lynx -stdin }
y
youurayy

可能不是你想要的,但既然你提到了 Node.js:在将它们提交到 GitHub 之前,我找不到一个好的工具来在我的本地驱动器上预览 GitHub Flavored Markdown 文档,所以今天我基于 Node.js 创建了一个:{ 1}

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


干得好,伙计。让我在编写节点应用程序时不必求助于 Ruby 或 Python,这很棒。
P
Peter Mortensen

GitHub 有您可以使用的 a Markdown API


jq --slurp --raw-input '{"text": "\(.)", "mode": "markdown"}' < README.md | curl --data @- https://api.github.com/markdown > README.html
@VebjornLjosa * 那个 * 或 grip ......你选择了。 :P
grip 太棒了。但是,不幸的是,由于它的名称,如果您忘记了它的命名方式,就不可能轻易找到它。 (也不能通过 MacPorts 获得)。
P
Peter Mortensen

使用 marked。它支持 GitHub Flavored Markdown,可用作 Node.js 模块并从命令行使用。

一个例子是:

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

我注意到这不支持代码块的语法突出显示等功能和清单等新功能。但是,嘿,它得到了大部分的方式!
非常好,我唯一缺少的是表格的一些边框。好吧,至少我可以渲染它们,这几乎正是我所需要的。在 GFM 中管道,输出 HTML :)
我对这个例子感到困惑,什么是 ^D
M
Mateusz Piotrowski

我创建了一个类似于 Atom 的预览功能的工具,但它是一个独立的应用程序。不确定这是否是您正在寻找的,但它可能会有所帮助。 -- https://github.com/yoshuawuyts/vmd

https://i.stack.imgur.com/eciJE.png


你们还支持这个吗?我今天尝试使用 NPM 安装,但没有骰子。 >下载 electron-v0.36.9-win32-x64.zip >错误:自签名证书
是的,我们是!你在哪个版本的 npm / node 上运行它? - 随意打开一个关于 GH 的问题,我们会看看这个。谢谢!
P
Peter Mortensen

这主要是对@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 处理器。


M
Martin Eden

pandocbrowser 对我来说效果很好。

用法:cat README.md | pandoc -f markdown_github | browser

安装(假设您使用的是 Mac OSX):

$ 酿造安装 pandoc

$ brew 安装浏览器

或者在 Debian/Ubuntu 上:apt-get install pandoc browser


apt-get isntall pandoc 可以,无需使用 brew 等不安全的本地内容。
@DominikGeorge 有一个错字,是安装,而不是安装
@DominikGeorge macOS 上没有 apt-get 。
n
notpeter

this comment 的基础上,我使用 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"


A
Asme Just

我将 Pandoc 与选项 --from=gfm 一起用于 GitHub 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 解决了这个问题。
我用 Pandoc 2.1.2 对其进行了测试。
如何在 ubuntu 上安装 2.2.1?
@AlexanderMills 你试过 sudo apt install pandoc 吗?
C
Community

另见https://softwareengineering.stackexchange.com/a/128721/24257

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

如果您有本地 Ruby,则使用 Redcarpet 的 Ruby-script 将是“命令行实用程序”


没有想法 - 我不写 Ruby,也没有阅读 Redcarpet 的资料
@LazyBadger,Sundown 是实际的解析器(用 C 编写)。不需要红地毯。
这可以说是最好的解决方案,但你没有给出具体的指示。那么在安装 gem gem install redcarpet 之后,假设我们在一个包含 README.md 的目录中,接下来会发生什么?
P
Peter Mortensen

我的最终解决方案是使用 Python Markdown。我滚动了固定栅栏块的 my own extension


P
Peter Mortensen

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

GFMS - Github Flavored Markdown Server

它简单轻量(无需配置)HTTP 服务器,您可以在任何包含 markdown 文件的目录中启动以浏览它们。

特征:

完整的 GFM Markdown 支持

源代码语法高亮

浏览文件和目录

漂亮的输出(和可配置的 CSS 样式表)

导出为 PDF


P
Peter Mortensen

GitHub(此后)开发了一个很好的模块化文本编辑器,称为 Atom(基于 Chromium 并使用 Node.js 模块进行包)。

默认的预安装包 Markdown Preview 允许您使用 Ctrl + Shift + M 在单独的选项卡中显示预览。

我还没有测试过它的完整语法,但由于它来自 GitHub,如果预览版的语法与他们的不同(使用 ~~~ 工作的隔离块),我会感到非常惊讶。

现在,虽然它在技术上不是基于命令行的,但它使用 Node.js 并输出到基于 DOM 的渲染器,这可能有助于尝试在基于 Node.js 的网络服务器上渲染基于 GitHub 语法的 HTML,或者只是离线编辑她/他的 README.md。


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

后期添加,但 showdownjs 有一个 CLI 工具,可用于将 MD 解析为 HTML。


e
eyllanesc

为此,我设法使用了一个单行 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 使用的工具。
S
Sandeep

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

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

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

mdviewer README.md

P
Peter Mortensen

我找到了一个可以为您执行此操作的网站:http://tmpvar.com/markdown.html。粘贴到您的 Markdown 中,它会为您显示它。它似乎工作得很好!

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


tmpvar 似乎不像表格那样做 GFM 版本增强
P
Peter Mortensen

一种“快速而简单”的方法是使用 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 的两次调用都是必需的。如果您只运行第二个,那么您将错过一些正确显示页面所需的依赖项。


d
daBertl

针对 elinks 的普通用户改进 @barry-stae 和 @Sandeep 的答案,您可以在 .bashrc 中添加以下内容:

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

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


C
Community

基于 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 和 Cucumber 的围栏块尝试了这个。虽然栅栏(ruby, 黄瓜等)似乎被识别为栅栏(因为它们以固定宽度的文本呈现),但没有语法突出显示。知道为什么吗?
M
Mohnish

另一个选项是 AllMark - markdown 服务器
Docker 映像可用于即用型设置。

$ allmark serve .

注意:它递归地扫描目录以从降价文件服务网站。因此,为了更快地处理单个文件,请将其移至单独的目录。


P
Peter Mortensen

我最近做了你想要的,因为我需要从 Markdown 文件生成文档,而且 GitHub 样式非常好。试试看。它是用 Node.js 编写的。

gfm


我知道,该模块已经 9 个月没有更新了,你为什么要对旧帖子投反对票?