手册页中的颜色


63

当我在“控制台”(而不是xterm)中查看手册页时,我看到了一些颜色,但是我没有在其中找到它xterm(例如konsole),有什么方法可以启用它?希望是一个相当简单的解决方案?

Answers:


78

您需要使用该termcap(5)功能。一些Unices的手册页上说该工具已经过时并且可以使用terminfo,但是在其他工具上仍然可以使用(并且terminfo更加复杂)。

更重要的是,less使用termcap


设置颜色 less

我这样做是为了使lessman(使用less)具有颜色:

$ cat ~/.LESS_TERMCAP 
export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_md=$(tput bold; tput setaf 6) # cyan
export LESS_TERMCAP_me=$(tput sgr0)
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) # yellow on blue
export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7) # white
export LESS_TERMCAP_ue=$(tput rmul; tput sgr0)
export LESS_TERMCAP_mr=$(tput rev)
export LESS_TERMCAP_mh=$(tput dim)
export LESS_TERMCAP_ZN=$(tput ssubm)
export LESS_TERMCAP_ZV=$(tput rsubm)
export LESS_TERMCAP_ZO=$(tput ssupm)
export LESS_TERMCAP_ZW=$(tput rsupm)
export GROFF_NO_SGR=1         # For Konsole and Gnome-terminal

然后在我中~/.bashrc,我这样做:

# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"

# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP

注意:请参阅有关LESS_TERMCAP_*变量的文档?这是如何工作的。

最终结果

    手册页的ss


7
我相信这样做的原因是因为“控制台”将“下划线”转换为颜色,而X11则支持下划线。您可以通过echo -e "\e[04mhello world\e[0m"在控制台和X11终端上键入并查看差异来测试该理论。因此,以上黑客滥用 termcap来让LESS知道它需要为粗体/下划线发出什么代码,并迫使其生成颜色转义代码。
肯特·弗雷德里克

7
确实,将下划线转换为蓝色有历史原因,可以追溯到原始PC图形适配器MDA和CGA的文本模式(实际上,CGA文本模式迄今为止仍然可用)。这些图形适配器每个字符存储两个字节:一个保存ASCII码,一个保存属性。MDA将属性字节解释为下划线,亮,闪烁和反色的组合,而CGA则将该字节解释为前景色和背景色。碰巧的是,底线的MDA属性等于黑底蓝色的CGA属性。
celtschk 2014年

3
这不适用于Konsole或Gnome终端。我设置了它们,唯一的颜色更改是光标和状态页。我发现我需要:export GROFF_NO_SGR=1
CMCDragonkai '16

2
这创建了很多子外壳。这种较简单的方法有什么优势?
汤姆·黑尔

1
@TomHale,主要是跨系统/终端兼容性(以及以明确的方式与他人共享脚本的能力)。如果您发现自己在使用不同控制代码的盒子上工作,并在其上scp / rsync shell配置文件,则当控制代码都像该示例一样都是硬编码时,它们可能无法在目标位置上正常工作机器,结果可能会出现乱码。当然,如果脚本只能在一两个已知的机器/终端设备上运行,那么硬编码方法就可以了。
Mark G.

15

您可以通过使用其他寻呼机来解决此问题,例如mostman实际上将使用PAGER环境变量中指定的程序。在man(1)手册页中:

MANPAGER,帕格

如果设置了$ MANPAGER或$ PAGER(优先使用$ MANPAGER),则将其值用作用于显示手册页的程序的名称。缺省情况下,使用分页器-s。

该值可以是简单的命令名称,也可以是带有参数的命令,并且可以使用外壳引号(反斜杠,单引号或双引号)。

它可能不使用管道来连接多个命令。如果需要,请使用包装器脚本,该脚本可以将文件显示为参数或标准输入。

如果most您的系统上已安装,请在启动之前尝试以下操作man

export PAGER=most

2
most应该安装,以便此工作。
enzotib

3
most有奇怪的键绑定...这是不可配置的。
Mateen Ulhaq

10

默认的下划线会伤害我的眼睛。此设置极大地改善了我的man页面阅读:

彩色手册页示例

在您的〜.bashrc中添加以下内容:

# Have less display colours
# from: https://wiki.archlinux.org/index.php/Color_output_in_console#man
export LESS_TERMCAP_mb=$'\e[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\e[1;33m'     # begin blink
export LESS_TERMCAP_so=$'\e[01;44;37m' # begin reverse video
export LESS_TERMCAP_us=$'\e[01;37m'    # begin underline
export LESS_TERMCAP_me=$'\e[0m'        # reset bold/blink
export LESS_TERMCAP_se=$'\e[0m'        # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m'        # reset underline
export GROFF_NO_SGR=1                  # for konsole and gnome-terminal

为了获得胜利,请与export MANPAGER='less -s -M +Gg' (源)结合以在文档中显示您的百分比。


3
正如@CMCDragonkai在对另一个答案的评论中提到的那样,这需要export GROFF_NO_SGR=1在某些终端仿真器上工作。

1
为了胜利!!我喜欢%显示export MANPAGER='less -s -M +Gg'添加。
MikeyE


3

持久保存“大多数”

打开终端(Ctrl+ Alt+ T

  1. 安装“最”。

    sudo apt-get install most
    
  2. 编辑.bashrc,输入:

    nano ~/.bashrc
    
  3. 添加这些行:

    # color man-pages persistently
    export PAGER='most'
    
  4. Ctrl+ O)-> Enter->(Ctrl+ X

  5. 刷新

    source ~/.bashrc
    
  6. 测试

    man ln
    

这在xterm中也适用。


为了避免打开nano,您可以从终端附加到bashrc:sudo apt install most; echo“ export PAGER ='most'” >>〜/ .bashrc; 源的〜/ .bashrc
威尔

1

取自http://nion.modprobe.de/blog/archives/569-colored-manpages.html

摘抄:

$ mkdir ~/.terminfo/ && cd ~/.terminfo

现在获取terminfo描述(将以下内容保存为mostlike.txt):

# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-pcolor
mostlike|manpages with color looking like most, 
    am, hs, km, mir, msgr, xenl, 
    cols#80, it#8, lines#24, wsl#40, 
    acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, 
    bel=^G, bold=\E[1m\E[31m, clear=\E[H\E[2J, cr=^M, 
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, 
    cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, 
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, 
    dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, 
    dsl=\E]0;\007, ed=\E[J, el=\E[K, enacs=\E)0, fsl=^G, 
    home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, 
    is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbs=^H, 
    kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, 
    kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, 
    kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, 
    kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, 
    kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, 
    kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, 
    kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, 
    kslt=\E[4~, rc=\E8, rev=\E[7m\E[34m, ri=\EM, rmacs=^O, 
    rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, 
    rmso=\E[m, rmul=\E[m, 
    rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>, sc=\E7, 
    sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h, 
    smkx=\E[?1h\E=, smso=\E[1;30m\E[47m, smul=\E[32m, 
    tbc=\E[3g, tsl=\E]0;, u6=\E[%i%d;%dR, u7=\E[6n, 
    u8=\E[?1;2c, u9=\E[c, 

现在使用tic(terminfo条目描述编译器)进行编译:

$ tic mostlike.txt

(您可能要mostlike.txt在编译后删除文件。)

然后,只需在*rc您喜欢的shell文件中定义一个别名即可。

$ alias man="TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man"

如果要修改terminfo文件,请infocmp mostlike稍后使用来获取它的内容。


11
如果您在此处汇总源代码,
则将很有帮助

3
请提供答案,而不仅仅是答案的链接。但是,提供支持您答案的链接非常好。想象一下,我正在谷歌搜索这个问题-在StackExchange上的一个很好的答案将很快找到通往结果第一页的方式。
Stefan Lasiewski 2010年

链接已死。

mostlike.txt网上找到了这个。
Kaushal Modi

输出是什么样的?
汤姆·黑尔

1

dirtybit的答案为例,我想更改突出显示的搜索结果的颜色。这称为“突出模式”,这是示例文件“ xterm-yel​​low.ti”:

xterm-yellow|yellow standout mode,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

编译并安装文件:

tic xterm-yellow.ti

将行添加到“〜/ .profile”或类似内容:

TERM=xterm-yellow
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.