2011-02-08 51 views
5

我真的很喜欢,可以通过tcsh彩色的手册页?

export LESS_TERMCAP_mb=$'\E[01;31m' 
export LESS_TERMCAP_md=$'\E[01;31m' 
export LESS_TERMCAP_me=$'\E[0m' 
export LESS_TERMCAP_se=$'\E[0m' 
export LESS_TERMCAP_so=$'\E[01;44;33m' 
export LESS_TERMCAP_ue=$'\E[0m' 
export LESS_TERMCAP_us=$'\E[01;32m' 

在您的.bashrc或者.zshrc得以实现彩色手册页。 我的问题是:如何在tcsh中导出这些变量?我必须在工作中使用tcsh,并且无法使其工作。我尝试了很多变化,但没有奏效。简单地用setenv替换出口,并用“”替换出口并不能解决问题。 但它应该以某种方式工作。如果我通过这个出口设置从我的zsh中启动一个tcsh,我也可以在tcsh中享受有色的manpages。但这是一个丑陋的解决方法。

+1

你很可能是在超级用户网站上问这个问题 – dotalchemy 2011-02-08 05:28:31

回答

4

问题是tcsh没有解释变量名称中的转义序列,所以当您尝试使用tcsh设置环境变量时,环境变量最后会包含文字\E。这里是你可以得到解决这个问题,使用bash解释转义序列的一种方式,虽然这是一个有点难看:

% setenv LESS_TERMCAP_md `bash -c 'echo -en "\e[01;31m"'` 
% setenv LESS_TERMCAP_me `bash -c 'echo -en "\e[0m"'` 
% setenv LESS_TERMCAP_se `bash -c 'echo -en "\e[0m"'` 
% setenv LESS_TERMCAP_so `bash -c 'echo -en "\e[01;44;33m"'` 
% setenv LESS_TERMCAP_ue `bash -c 'echo -en "\e[0m"'` 
% setenv LESS_TERMCAP_us `bash -c 'echo -en "\e[01;32m"'` 
+0

我同意,这有点难看,但它有效。虽然,我让问题的状态开放,也许我们会得到一个本地解决方案。 – skorgon 2011-02-08 06:13:47

6

要做到这一点是原产于tcsh的方式移植到不同的终端类型是使用的echotc内建命令:

setenv LESS_TERMCAP_mb `echotc md; echotc AF 1` 
setenv LESS_TERMCAP_md `echotc md; echotc AF 1` 
setenv LESS_TERMCAP_me `echotc me` 
setenv LESS_TERMCAP_se `echotc me` 
setenv LESS_TERMCAP_so `echotc md; echotc AF 3; echotc AB 4` 
setenv LESS_TERMCAP_ue `echotc me` 
setenv LESS_TERMCAP_us `echotc md; echotc AF 2` 

termcap代码和颜色代码参见man 5 terminfo

mdenter_bold_mode
meexit_attribute_mode
AFset_a_foreground
ABset_a_background

顺便提一下,要做到这一点在Bash中,使用外部工具tput和terminfo的能力名称:

export LESS_TERMCAP_mb=$(tput bold; tput setaf 1) 
export LESS_TERMCAP_md=$(tput bold; tput setaf 1) 
export LESS_TERMCAP_me=$(tput sgr0) 
export LESS_TERMCAP_se=$(tput sgr0) 
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) 
export LESS_TERMCAP_ue=$(tput sgr0) 
export LESS_TERMCAP_us=$(tput bold; tput setaf 2)