现在,我很确定这里的限制。但让我们退后一步。
简单陈述
READNULLCMD="less -R"
不起作用,产生以下错误:
$ <basic.tex
zsh: command not found: less -R
行。很确定这是因为,默认情况下,zsh不会在每个空格中拆分字符串变量。无论zsh使用此变量,它都使用$ READNULLCMD,它应该使用$ {= READNULLCMD},以确保选项参数与正常空间的命令正确分离。从1996年回来看这个讨论(!): http://www.zsh.org/mla/users/1996/msg00299.html
那么,没有设置SH_WORD_SPLIT(我不想99%的时间),最好的解决方法是什么?
到目前为止,我最好的想法是将READNULLCMD分配给一个简单的zsh脚本,该脚本在STDIN上调用“less -R”。例如
#!/opt/local/bin/zsh
less -R /dev/stdin
不幸的是,这似乎是一个非首发,因为在这种方式中使用较少因为某些原因错过了/ dev / stdin输入的前几行。
有人有更好的想法吗?
答案 0 :(得分:1)
export LESS=…
可能是专门用于less
的好解决方案,如果您希望此类行为在所有情况下都是默认行为,但如果您想要更通用的行为,那么您可以使用函数:
function _-readnullcmd()
{
less -R
}
READNULLCMD=_-readnullcmd
(_-
或readnullcmd
没有特殊含义,前者永远不会出现在任何分布式zsh脚本中,后者表示该函数的用途。)
答案 1 :(得分:1)
问题不是没有读取它的环境变量(LESS或LESSOPEN)。问题是您没有像您想象的那样调用READNULLCMD。
<foo
不会转化为
less $LESS foo
而是
之类的东西cat foo | less $LESS
或者,或许
cat foo $LESSOPEN | less $LESS
我猜你(像我一样)想要使用-R来获取语法着色(在LESSOPEN中使用src-hilite-lesspipe.sh,后者又使用&#34; source-highlight&#34;实用程序) 。后两种调用方式的问题是src-hilite-lesspipe.sh(嵌入在$ LESSOPEN中)不会收到文件名,因此它无法推断出文件类型(通过--infer-lang)选项&#34; source-highligt&#34;)。没有文件名后缀,&#34; source-highlight&#34;将恢复为&#34;没有突出显示&#34;。
您可以在READNULLCMD中获取语法着色,但是以一种相当无用的方式。这是通过--lang-def选项显式指定语言。但是,由于在数据通过管道匿名传递时,没有文件名,因此您将获得与#34; source-higlight&#34;一样少的线索。也许有一种方法可以做一个动态启发式解析器并通过内容推导它,但是你肯定会离开这个小小的练习。
答案 2 :(得分:0)
将$LESS
env var设置为less
中您始终想要的选项。
因此,请勿触摸READNULLCMD
并在zshrc中使用export LESS="R"
(以及您想要的其他选项)。