如今,Linux 发行版有一个默认LESSOPEN
设置/usr/bin/lesspipe
,允许用户轻松检查压缩文件或 PDF 文件等。
现在我想看看是否可以为 less 添加语法高亮。这很容易完成来源突出显示。我用过LESSOPEN="| /usr/bin/source-highlight -i %s -q -f esc"
并且效果很好。
但现在问题变成了:如何获得 lesspipe 和 source-highlight 的行为?简单地一个接一个地附加是行不通的:
$ export LESSOPEN="| /usr/bin/lesspipe %s | /usr/bin/source-highlight -i %s -q -f esc"
$ less foo
Invalid LESSOPEN variable
这也没有意义,所以这并不奇怪。
是否可以在不编写复杂脚本的情况下进行设置?最好的情况是进行链接,即为压缩文件提供语法突出显示。
答案1
初始管道之后的变量中的命令LESSOPEN
由环境变量指示的 shell 执行SHELL
,并且必须在其标准输出上生成所需的内容。
您可以将 的输出lesspipe
作为输入传递给另一个从标准输入读取并写入标准输出的命令。但是,为了source-highlight
从标准输入中读取内容,需要告诉它要突出显示哪种语言,因此source-highlight
这种方式不起作用。
当lesspipe
无法识别文件格式时,它不会打印任何内容,这较少被解释为读取原始文件的指示。如果你有ifne
从Joey Hess 的 moreutils,您可以用它来检测这种情况并尝试source-highlight
替代。您需要将原始文件名保存在变量中,以便可以使用它两次。
LESSOPEN='|file=%s; /usr/bin/lesspipe "$file" | /usr/bin/ifne -n /usr/bin/source-highlight -i "$file" -o STDOUT 2>/dev/null'
请注意,您需要在启动后包含-r
或,或键入或,以便更少地渲染颜色。-R
$LESS
-r
-R
less