我有以下 LESS_TERMCAP 设置:
# less config
export LESS=-R
export LESS_TERMCAP_mb=$'\E[01;31m' # begin blinking
export LESS_TERMCAP_md=$'\E[01;31m' # begin bold
export LESS_TERMCAP_me=$'\E[0m' # end mode
export LESS_TERMCAP_se=$'\E[0m' # end standout-mode
export LESS_TERMCAP_so=$'\E[01;44;37m' # begin standout-mode
export LESS_TERMCAP_ue=$'\E[0m' # end underline
export LESS_TERMCAP_us=$'\E[01;33m' # begin underline
export LESSOPEN='| /usr/bin/highlight -O ansi %s 2>/dev/null'
当我投入时~/.profile
,观众越少,就会变得绝对混乱。另一方面,当我输入~/.zshrc
(我正在使用zsh
)时,它起作用了,为什么?
由于我被教导将环境变量保存到非登录 shell 配置文件中,例如~/.profile
,所以我想这样做。
更多信息:
tapyu@tapyu-ThinkPad-P73
OS: Ubuntu 20.04 focal
Kernel: x86_64 Linux 5.13.0-28-generic
Uptime: 2h 25m
Packages: 2559
Shell: zsh 5.8
Resolution: 2048x1152
DE: GNOME 3.36.5
WM: Mutter
WM Theme: Adwaita
GTK Theme: Yaru-dark [GTK2/3]
Icon Theme: Yaru
Font: Ubuntu 11
Disk: 123G / 217G (60%)
CPU: Intel Core i7-9750H @ 12x 4.5GHz [43.0°C]
GPU: Intel Corporation UHD Graphics 630 (Mobile)
NVIDIA Corporation GP107GLM [Quadro P620] (rev a1)
RAM: 4740MiB / 23681MiB
此致。
答案1
检查变量的值LESS_TERMCAP_xxx
:
print -lr ${(q)LESS_TERMCAP_mb}
(或者,如果不使用 zsh echo "$LESS_TERMCAP_mb" | od -tx1c
:)
正如托马斯·迪基(Thomas Dickey)猜测的那样,您可能会看到\$\\E\[01\;31m
而不是$'\033'\[01\;31m
($ \ E [
……而不是033 [
……)。如果.profile
由不理解语法的 shell(例如 dash)调用,则会发生这种情况$'…'
。/bin/sh
在包括 Ubuntu 在内的许多流行发行版上都有 dash。
一种解决方案是使用另一种表示转义字符的方法。您可以使用printf
它来便携地生成它:
esc=$(printf \\033)
export LESS_TERMCAP_mb="${esc}[01;31m" # begin blinking
…
或者,在您的.zshrc
.这样做的优点是可以让您根据终端的功能自定义其内容。然后您可能想要调用tput
而不是硬编码转义序列。 (有关 LESS_TERMCAP_* 变量的文档?可能有帮助。)
或者,使用定义这些变量少键,它将它们写入 less 的配置文件 ( ~/.less
)。如果您始终将它们设置为相同的值,这比将它们放入环境中更有意义,因为less
它们是专门的配置。然而,这在旧版本的 less 中不起作用。