为什么 LESS_TERMCAP 设置在放入 ~/.profile 时不起作用

为什么 LESS_TERMCAP 设置在放入 ~/.profile 时不起作用

我有以下 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 中不起作用

相关内容