UNIX系统的less-style markdown viewer

时间:2011-09-29 15:11:06

标签: node.js bash unix markdown less-unix

我在JavaScript中有一个Markdown字符串,我想在less(或者,我想,more)样式的查看器中显示它(带有粗体等)线。

例如,使用字符串

"hello\n" + 
"_____\n" + 
"*world*!"

我希望弹出一个带有可滚动内容的输出,看起来像

  

你好

     

世界

这是可能的,如果是这样的话?

9 个答案:

答案 0 :(得分:68)

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(这不是“风格不太好”,但它可能很有用)。

答案 1 :(得分:30)

我试着在上面的评论中写这个,但我无法正确格式化我的代码块。要编写“较少过滤器”,请尝试将以下内容另存为~/.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,其格式将类似于联机帮助页。

答案 2 :(得分:8)

如果您进入颜色,那么这也值得检查:

terminal_markdown_viewer

它也可以直接在其他程序或python模块中使用。

它有一个很多的样式,比如200以上的降价和可以组合的代码。

pic2

声明

  • 这可能还有错误

  • 我是它的作者,也许有些人喜欢它; - )

答案 3 :(得分:5)

完全不同的替代方案是mad。这是我刚刚发现的shell脚本。它非常容易安装,并且可以很好地在控制台中显示降价。

答案 4 :(得分:3)

我根据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”表示浏览器。

答案 5 :(得分:0)

我个人使用这个脚本:

#!/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文件作为参数传递或将其传递给stdin 。需要降价和谷歌浏览器。 Chromium也可以使用,但你需要用

替换最后一行
chromium-browser --app=file:///tmp/md-$id

如果您想了解它,可以使用一些css使其看起来不错,我编辑了脚本并使其从CDN使用Bootstrap3(overkill)。

#!/bin/bash
id=$(uuidgen | cut -c -8)
markdown $1 > /tmp/md-$id
sed -i "1i <html><head><style>body{padding: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 &

答案 6 :(得分:0)

使用OSX我更喜欢使用此命令

gf.get

转换markupm,使用groff格式化文档,并将管道转换为更少的

信用:http://blog.metamatt.com/blog/2013/01/09/previewing-markdown-files-from-the-terminal/

答案 7 :(得分:0)

这是一个封装函数的别名:

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:如果第一个参数不为null,那么......
  • if [ -f "$1" ] ; then:此外,如果文件存在并且是常规的那么......
  • cat arg1 arg2 | groff ...:cat发送这两个连接到groff的参数;争论是:
    • arg1:<(echo ".TH $1 7日期--iso-8601 Dr.Beco Markdown"):启动文件的内容和groff将理解为页眉和页脚注释。这会替换-s上的pandoc键中的空标题。
    • 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来避免此管道,但是{ {1}}不像groffer那样健壮,有些文件会挂起或根本不显示。所以,让它再经过一个管道,真是太棒了!

将其添加到less(或类似)

答案 8 :(得分:0)

我也会在这里发布my unix page answer

IMHO严重低估了命令行降价标记查看器是markdown-cli

安装

npm install markdown-cli --global

用法

markdown-cli <file>

功能

可能没有注意到太多,因为它错过了任何文件......
但据我可以通过一些示例降价文件来解决,有些事情让我信服:

  • 更好地处理格式错误的文件(类似于atom,github等;例如,当列表中缺少空行时)
  • 标题或列表中的格式更稳定(列表中的粗体文本会破坏其他一些查看器中的子列表)
  • 正确的表格格式
  • 语法突出显示
  • 解析脚注链接以显示链接而不是脚注编号(不是每个人都可能想要这个)

截图

example.png

缺点

我已经意识到以下问题

  • 代码块被展平(所有前导空格都消失)
  • 在列表
  • 之前出现两个空白行