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

时间:2013-03-19 10:25:16

标签: linux shell markdown gnu text-processing

我希望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

所以,主要问题是:

  • 如何将一些基本格式信息传递给less,而不是通过html2txt
  • 将其丢失
  • 将新内容打印到 stdout 是否正确?或者我可以将*.html写入文件磁盘并让less在自己的题外点处理该html(看到html扩展并对其进行处理吗?)

3 个答案:

答案 0 :(得分:11)

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

您的.lessfilter脚本将是:

case "$1" in
  *.md)
    pandoc -s -f markdown -t man "$1" | man -l -
    ;;

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

case "$1" in
  *.md)
    markdown "$1" | lynx -stdin
    ;;

而且,是的,lessfilter脚本必须写入stdout。

答案 1 :(得分:5)

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

答案 2 :(得分:4)

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

我在lessopen.sh中创建了脚本lessclose.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

#!/bin/sh
rm $2

lessopen.sh的返回值是文件的名称,其内容为less en。或者,如果没有,则使用原始文件。 -s测试文件是否为零大小。 lessclose.sh清理。

然后在我的〜/ .bash_profile中:

export LESSOPEN="lessopen.sh %s"
export LESSCLOSE="less-close.sh %s %s"

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

brew install pandoc

然后简单地说:

less README.md

阅读它。