15

我想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-extension 并对其进行操作?)
4

3 回答 3

14

看看潘多克。它可以将文件从 markdown 格式转换为 groff 手册页,然后您可以在man.

您的.lessfilter脚本将是:

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

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

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

而且,是的,lessfilter脚本必须写入标准输出。

于 2013-03-19T10:59:52.383 回答
6

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

于 2014-01-17T19:05:03.193 回答
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

#!/bin/sh
rm $2

的返回lessopen.sh值是文件名,其内容为lessen。或者如果没有,则使用原始文件。测试-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

阅读它呈现。

于 2016-07-21T02:52:02.960 回答