手册页中的颜色

xen*_*ide 82 less colors man pager termcap

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

Ste*_*ski 93

您需要使用该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
Run Code Online (Sandbox Code Playgroud)

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

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

# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP
Run Code Online (Sandbox Code Playgroud)

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

最终结果

    手册页的 ss

  • 我相信这样做的原因是因为“控制台”将“下划线”翻译成颜色,而 X11 的东西支持下划线。您可以通过在控制台和 X11 终端中键入 `echo -e "\e[04mhello world\e[0m"` 并查看差异来测试该理论。因此,上面的 hack *abuses* termcap 向 LESS 撒谎,说明它需要为粗体/下划线发出哪些代码,并强制它改为生成颜色转义代码。 (9认同)
  • 事实上,将下划线转换为蓝色是有历史原因的,可以追溯到原始 PC 图形适配器 MDA 和 CGA 的文本模式(实际上 CGA 文本模式至今仍然可用)。这些图形适配器为每个字符存储两个字节:一个保存 ASCII 代码,一个保存属性。MDA 将属性字节解释为下划线、亮色、闪烁和反色的组合,而 CGA 将该字节解释为前景色和背景色。碰巧下划线的 MDA 属性等于黑底蓝字的 CGA 属性。 (8认同)
  • 这在 Konsole 或 Gnome 终端中不起作用。我设置了它们,唯一的颜色变化是光标和状态页面。我发现我需要:`export GROFF_NO_SGR=1`。 (4认同)
  • 这是创建了很多子壳。与这种 [更简单的方法](http://unix.stackexchange.com/a/329092/143394) 相比有什么优势? (2认同)

Tom*_*ale 20

默认下划线伤害了我的眼睛。这个设置极大地改善了我的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
Run Code Online (Sandbox Code Playgroud)

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

  • 正如@CMCDragonkai 在对另一个答案的评论中提到的,这需要 `export GROFF_NO_SGR=1` 才能在某些终端模拟器上工作。 (3认同)
  • 为了胜利!!我喜欢%显示`export MANPAGER='less -s -M +Gg'`添加。 (2认同)

0xY*_*NTI 17

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

MANPAGER, PAGER

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

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

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

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

export PAGER=most
Run Code Online (Sandbox Code Playgroud)

  • `most` 有奇怪的键绑定......这是不可配置的。 (5认同)
  • 应该安装 `most`,以使其正常工作。 (3认同)

tre*_*mby 7

如果您使用Oh My Zsh,则可以将其添加colored-man-pages到文件中的plugins数组中.zshrc


小智 5

坚持不懈地保存“大部分”

打开终端 ( Ctrl++ Alt)T

  1. 安装“大多数”。

    sudo apt-get install most
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编辑 .bashrc ,输入:

    nano ~/.bashrc
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加这些行:

    # color man-pages persistently
    export PAGER='most'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 节省

    ( Ctrl+ O) -> Enter-> ( Ctrl+ X)

  5. 刷新

    source ~/.bashrc
    
    Run Code Online (Sandbox Code Playgroud)
  6. 测试

    man ln
    
    Run Code Online (Sandbox Code Playgroud)

这在 xterm 中也有效。

  • 这样做的缺点是将寻呼机设置为“大多数”以供寻呼机的所有使用。如果您只想更改手册页的寻呼机,最好使用“export MANPAGER='most'”。 (3认同)

Bru*_*uce 5

在 Linux 上,您可以尝试以下MANPAGER设置 [1]。第二个需要bat.

MANPAGER="less -R --use-color -Dd+r -Du+b"
Run Code Online (Sandbox Code Playgroud)

或者

MANPAGER="sh -c 'col -bx | bat -l man -p'"
Run Code Online (Sandbox Code Playgroud)

在 Gentoo Linux 上,你也可以尝试这个,这需要app-text/manpager

MANPAGER=manpager
Run Code Online (Sandbox Code Playgroud)

(我没有阅读 的代码manpager,我猜它只是命令less和环境变量的包装LESS_TERMCAP_??)。

[1] https://wiki.gentoo.org/wiki/Man_page#Color_for_man_pages