在 bash 脚本中,我们可以用来tput
设置与终端无关的 less 变量:
export LESS_TERMCAP_me=$(tput sgr0; )
我们可以用 做同样的事情lesskey
吗?
答案1
简短回答
是的您可以将变量放入文件
LESS_TERMCAP_me
中lesskey
,但它需要修复源代码并构建您自己的less
版本(我在下面解释)。不该
lesskey
文件不能包含外部命令,以便tput
与终端无关。但是,您可以lesskey
按照以下建议使用多个文件托马斯·迪基的回答。
lesskey
文件
命令lesskey
用于将人类可读的文本内容转换为命令的二进制配置文件less
。该配置文件名为lesskey
文件通常是文件~/.less
.
该文件包含三个部分:
- 命令(例如
:q quit
) - 行编辑(例如
^G abort
) less
环境变量(例如LESS_TERMCAP_me = \033(B\033[m
)
将变量放入文件LESS_TERMCAP_*
中lesskey
$ cat > lesskey.txt << EOF
#env
LESS = -iSrsM +Gg
LESS_TERMCAP_md = $(tput bold; tput setaf 6)
LESS_TERMCAP_me = $(tput sgr0)
LESS_TERMCAP_so = $(tput bold; tput setaf 3; tput setab 4)
LESS_TERMCAP_se = $(tput rmso; tput sgr0)
LESS_TERMCAP_us = $(tput smul; tput bold; tput setaf 7)
LESS_TERMCAP_ue = $(tput rmul; tput sgr0)
LESS_TERMCAP_mr = $(tput rev)
LESS_TERMCAP_mh = $(tput dim)
EOF
$ lesskey lesskey.txt # By default lesskey writes ~/.less
$ man bash # By default man uses less (pager)
漏洞
该命令less
读取配置~/.less
太晚了:
就在搜索变量之后LESS_TERMCAP_*
。
此错误影响487版于 2017 年 3 月 29 日发布(当然还有之前的版本)。
我刚刚向维护人员发送了错误报告和相应的修复程序。当修复应用于下一个less
版本时,我将更新此答案......
自己修复一下
从以下位置下载源代码存档:
反转文件中
main.c
第 113 行的两行
之前:/* * Process command line arguments and LESS environment arguments. * Command line arguments override environment arguments. */ is_tty = isatty(1); get_term(); init_cmds(); init_charset(); init_line();
后:
/* * Process command line arguments and LESS environment arguments. * Command line arguments override environment arguments. */ is_tty = isatty(1); init_cmds(); /* Load lesskey file before */ get_term(); /* getting variables LESS_TERMCAP_* */ init_charset(); init_line();
安装构建所需的依赖项
./configure
如果
./configure
失败,请确定缺少的依赖项。
就我而言,我已经安装了ncurses-devel
获取 headerterm.h
。建造
make
将您自己编译的内容保存
less
在某个地方,例如个人目录~/bin
mkdir -p ~/bin cp ./less ~/bin PATH="$PATH:~/bin"
不要忘记
PATH
在您的文件中设置环境变量~/.profile
,或者如果您更喜欢任何其他文件~/.bashrc
,~/.login
...
额外提示
请参阅
TERMCAPS
手册页中使用的LESS_TERMCAP_DEBUG=1 man bash
TERMCAPS
使用编码检索手册页MANPAGER='tee man.txt' man bash
结合这两个技巧
MANPAGER='tee man.txt' man bash LESS_TERMCAP_DEBUG=1 less man.txt
答案2
您可以为每种终端类型less
读取不同的lesskey
文件,例如,通过在 shell 初始化中设置LESSKEY
(或) 环境。LESSKEY_SYSTEM
执行此操作的简单方法是使用变量TERM
作为文件名的一部分,并让 shell 在设置变量之前检查这些与终端相关的文件是否存在LESSKEY
。