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*.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.
这不适用于我的 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
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.