用于 UNIX 系统的较少样式的降价查看器
Posted
技术标签:
【中文标题】用于 UNIX 系统的较少样式的降价查看器【英文标题】:less-style markdown viewer for UNIX systems 【发布时间】:2011-11-27 19:19:48 【问题描述】:我在 javascript 中有一个 Markdown 字符串,我想在命令行的less
(或者,我想是more
)样式的查看器中显示它(使用粗体等)。
例如,用一个字符串
"hello\n" +
"_____\n" +
"*world*!"
我想让输出弹出看起来像这样的可滚动内容
你好
世界
这可能吗?如果可以,怎么做?
【问题讨论】:
你真的想要粗体和斜体吗?你怎么能在less
中得到它?祝你好运。
less
当然可以显示粗体和下划线;查看手册页的显示方式。您只需要将 markdown 转换为 less
可以处理的内容,也许将 nroff
作为中间步骤。
类似的问题:unix.stackexchange.com/q/4140/4667
【参考方案1】:
Pandoc 可以将 Markdown 转换为 groff 手册页。
这个(感谢 nenopera 的评论):
pandoc -s -f markdown -t man foo.md | man -l -
应该可以解决问题。 -s
选项告诉它生成正确的页眉和页脚。
可能还有其他 markdown-to-*roff 转换器; Pandoc 恰好是我找到的第一个。
另一种选择是markdown
命令(在 Debian 系统上为apt-get install markdown
),它将 Markdown 转换为 html。例如:
markdown README.md | lynx -stdin
(假设您有lynx
基于终端的网络浏览器)。
或者(感谢 Danny 的建议)您可以这样做:
markdown README.md > README.html && xdg-open README.html
xdg-open
(在某些系统上)在首选应用程序中打开指定的文件或 URL。这可能会在您首选的 GUI Web 浏览器中打开 README.html
(这并不完全是“较少样式”,但它可能很有用)。
【讨论】:
真的很棒,而且不仅仅是为了降价。但如果你不想搞砸,这是 some-pandoc-command:pandoc -s -f markdown -t manman
版本不支持本地文件模式 (man -l
)。这是 Mac OS X 最接近的方法: pandoc -s -f markdown -t man foo.md | groff -T utf8 -man |少
+1 用于 metamatt 的评论 - 这也可用于编写更少的过滤器。例如,尝试将以下内容另存为 .lessfilter #!/bin/sh case "$1" in *.md) extension-handler "$1" pandoc -s -f markdown -t man "$1" |groff -T utf8 -man - ;; *) # 我们不处理这种格式。 exit 1 esac # 不需要 lesspipe 进一步处理 exit 0
然后,您可以输入less FILENAME.md
,它将被格式化为手册页。
如果您的浏览器可以响应open
命令:markdown README.md > ~/readme.html && open ~/readme.html
多亏了这个答案,我的.bashrc
现在有了function md () markdown $1 | lynx --stdin;
。所需的依赖项占用空间很小,这在受约束的盒子上很好。您可以检查您的机器上是否已经存在w3m
或links
。【参考方案2】:
我试图在上面的评论中写下这个,但我无法正确格式化我的代码块。要编写“更少的过滤器”,请尝试将以下内容保存为 ~/.lessfilter
:
#!/bin/sh
case "$1" in
*.md)
extension-handler "$1"
pandoc -s -f markdown -t man "$1"|groff -T utf8 -man -
;;
*)
# We don't handle this format.
exit 1
esac
# No further processing by lesspipe necessary
exit 0
然后,您可以输入less FILENAME.md
,它将被格式化为手册页。
【讨论】:
别忘了chmod +x
.lessfilter
。另外,可能需要less -R
。
这是一个很好的答案。不仅解决了原来的问题,还为我的花招增加了一项新技能!使用更少的过滤器!
我必须将 -K utf8
切换到 groff (***.com/a/24969648/1581629),否则我的列表会显示诸如“ââââ”之类的内容【参考方案3】:
一个完全不同的选择是mad。这是我刚刚发现的一个 shell 脚本。它非常易于安装,并且可以在控制台中很好地呈现 markdown。
【讨论】:
【参考方案4】:我个人使用这个脚本:
#!/bin/bash
id=$(uuidgen | cut -c -8)
markdown $1 > /tmp/md-$id
google-chrome --app=file:///tmp/md-$id
它将 markdown 呈现为 HTML,将其放入 /tmp/md-...
中的文件中,然后在没有 URI 栏等的 kiosk chrome 会话中打开它。您只需将 md 文件作为参数传递或通过管道将其传递到标准输入。需要降价和谷歌浏览器。 Chromium 也应该可以使用,但您需要将最后一行替换为
chromium-browser --app=file:///tmp/md-$id
如果你想看上它,你可以使用一些 css 让它看起来不错,我编辑了脚本并使它使用 CDN 中的 Bootstrap3(矫枉过正)。
#!/bin/bash
id=$(uuidgen | cut -c -8)
markdown $1 > /tmp/md-$id
sed -i "1i <html><head><style>bodypadding:24px;</style><link rel=\"stylesheet\" type=\"text/css\" href=\"http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css\"></head><body>" /tmp/md-$id
echo "</body>" >> /tmp/md-$id
google-chrome --app=file:///tmp/md-$id > /dev/null 2>&1 &
【讨论】:
我建议用mktemp
替换uuid hack,这实际上是安全且最佳的做法;它还会给你一个完整的路径名,之后你可以rm
。【参考方案5】:
如果您喜欢颜色,那么也许这也值得一试:
terminal_markdown_viewer
它也可以在其他程序或 python 模块中直接使用。
它有很多种样式,比如200多种markdown和可以组合的代码。
免责声明
这是一个相当不错的 alpha 版本,可能仍有错误
我是它的作者,也许有人喜欢它;-)
【讨论】:
【参考方案6】:我基于Keith's answer写了几个函数:
mdt()
markdown "$*" | lynx -stdin
mdb()
local TMPFILE=$(mktemp)
markdown "$*" > $TMPFILE && ( xdg-open $TMPFILE > /dev/null 2>&1 & )
如果您使用的是zsh
,只需将这两个函数放在~/.zshrc
中,然后从您的终端调用它们,就像
mdt README.md
mdb README.md
“t”代表“终端”,“b”代表浏览器。
【讨论】:
【参考方案7】:使用 OSX 我更喜欢使用这个命令
brew install pandoc
pandoc -s -f markdown -t man README.md | groff -T utf8 -man | less
转换markupm,用groff格式化文档,用管道转less
信用:http://blog.metamatt.com/blog/2013/01/09/previewing-markdown-files-from-the-terminal/
【讨论】:
【参考方案8】:这是一个封装函数的别名:
alias mdless='_mdless() if [ -n "$1" ] ; then if [ -f "$1" ] ; then cat <(echo ".TH $1 7 `date --iso-8601` Dr.Beco Markdown") <(pandoc -t man $1) | groff -K utf8 -t -T utf8 -man 2>/dev/null | less ; fi ; fi ;; _mdless '
说明
alias mdless='...'
:为mdless
创建一个别名
_mdless() ...;
:创建一个临时函数以供以后调用
_mdless
: 最后调用它(上面的函数)
函数内部:
if [ -n "$1" ] ; then
: 如果第一个参数不为空,那么...
if [ -f "$1" ] ; then
:另外,如果文件存在并且是常规文件,那么...
cat arg1 arg2 | groff
... : cat 将这两个参数连接到 groff;论据是:
arg1: <(echo ".TH $1 7
date --iso-8601Dr.Beco Markdown")
: 启动文件的内容,groff
将理解为页眉和页脚注释。这将替换pandoc
上的-s
键中的空标题。
arg2: <(pandoc -t man $1)
: 文件本身,被pandoc
过滤,输出man
风格的文件$1
| groff -K utf8 -t -T utf8 -man 2>/dev/null
:将生成的连接文件通过管道传输到 groff
:
-K utf8
所以groff
理解输入文件代码
-t
所以它在文件中正确显示表格
-T utf8
所以它以正确的格式输出
-man
所以它使用 MACRO 包以man
格式输出文件
2>/dev/null
忽略错误(毕竟,它是手动转换的原始文件,只要我们能以不那么难看的格式看到文件,我们就不会关心错误)。李>
| less
:最后,显示用less
对其进行分页的文件(我试图通过使用groffer
而不是groff
来避免这个管道,但是groffer
不如less
和一些文件那么健壮要么挂掉,要么根本不显示。所以,让它再通过一个管道,见鬼!
将其添加到您的 ~/.bash_aliases
(或类似名称)
【讨论】:
【参考方案9】:我也会在这里发my unix page answer:
恕我直言,一个被严重低估的命令行 Markdown 查看器是 markdown-cli。
安装
npm install markdown-cli --global
用法
markdown-cli <file>
特点
可能没有引起太多注意,因为它遗漏了任何文档... 但据我可以通过一些示例降价文件弄清楚,一些让我信服的事情:
更好地处理格式错误的文件(类似于 atom、github 等;例如,当列表前缺少空行时) 标题或列表中的格式更稳定(列表中的粗体文本会破坏其他查看器中的子列表) 正确的表格格式 语法高亮 解决脚注链接以显示链接而不是脚注编号(不是每个人都可能想要这个)截图
缺点
我已经意识到以下问题
代码块被展平(所有前导空格消失) 列表前出现两个空行【讨论】:
以上是关于用于 UNIX 系统的较少样式的降价查看器的主要内容,如果未能解决你的问题,请参考以下文章