如何配置'less'来显示格式化的markdown文件?

tow*_*owi 12 linux shell markdown text-processing gnu

我想有一些格式的less显示*.md降价文件 - 比如我知道less可以,对于联机帮助页等.我正在运行Ubuntu 12.04.

我将用户定义的过滤器放入.lessfilter:

#!/bin/sh
case "$1" in
  *.md)
    fn=/tmp/$1.$$.html
    markdown "$1" | html2txt > $fn  ### LOSES FORMATTING
    cat $fn                         ### TO STDOUT???
    ;;
  *)
  # We don't handle this format
  exit 1
esac
# No further processing by lesspipe necessary
exit 0
Run Code Online (Sandbox Code Playgroud)

所以,主要问题是:

  • 我怎样才能传递一些基本的格式信息less,而不是丢失它html2txt
  • 将新内容打印到stdout是否正确?或者我可以只写入*.html文件磁盘并让它less在自己的题外话处理(看到html扩展并对其进行操作?)

dog*_*ane 11

看看Pandoc吧.它可以将文件从markdown格式转换为groff手册页,然后您可以在其中查看man.

你的.lessfilter脚本将是:

case "$1" in
  *.md)
    pandoc -s -f markdown -t man "$1" | man -l -
    ;;
Run Code Online (Sandbox Code Playgroud)

或者,使用该markdown命令将其转换为html ,然后使用lynx浏览器进行查看,但这对我来说效果不佳.

case "$1" in
  *.md)
    markdown "$1" | lynx -stdin
    ;;
Run Code Online (Sandbox Code Playgroud)

并且,是的,lessfilter脚本必须写入stdout.

  • 实际上,`markdown'$ 1"| html2text`版本效果最好,因为我得到了ascii-art boldface等.`pandoc | man`-variant基本上可以工作,但每种格式都丢失了.我猜,因为输出进入了一个'less`的管道,这阻止了`man`做任何格式化.`markdown | lynx`-variant没有做任何事情,也许是因为`lynx`是互动的?我刚刚显示原始文件. (3认同)

Han*_*kCa 6

这不适用于我的 MacOSX 版本(10.10.5 Yosemite)。手册页也没有提到.lessfilter。这是我所做的(在阅读 MAN 页面后 - 感谢这个问题的提示和提示)。

我创建了脚本lessopen.shlessclose.sh在我的~/bin. 它们分别是:

#!/bin/bash

case "$1" in
  *.md)
    pandoc -s -f markdown -t man "$1" | groff -T utf8 -man > /tmp/less.$$
    if [ -s /tmp/less.$$ ]; then
        echo /tmp/less.$$
    else
        rm -f /tmp/less.$$
    fi
    ;;
esac
Run Code Online (Sandbox Code Playgroud)

#!/bin/sh
rm $2
Run Code Online (Sandbox Code Playgroud)

从 返回的lessopen.sh是包含内容为lessen的文件的名称。或者,如果没有,则使用原始文件。该-s如果文件不为零规模测试。该lessclose.sh清理。

然后在我的 ~/.bash_profile 中是:

export LESSOPEN="lessopen.sh %s"
export LESSCLOSE="less-close.sh %s %s"
Run Code Online (Sandbox Code Playgroud)

我还必须安装 pandoc - groff 已经存在

brew install pandoc
Run Code Online (Sandbox Code Playgroud)

然后简单地:

less README.md
Run Code Online (Sandbox Code Playgroud)

阅读它呈现。


小智 5

Dogbane的答案很棒,但如果您使用groff -T utf8 -man而不是进行man -l格式化,那么粗体,斜体等都会通过.如下所示:https://stackoverflow.com/a/20197316/2674930.