如何在Fish shell中着色man-page?

时间:2015-12-14 10:55:06

标签: bash shell colors fish man

描述的bash解决方案tmux man-page search highlighting在bash中效果很好,但在移植到fish时失败。

Fish config

function configure_pager
    # Colored man pages: http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/
    # Less Colors for Man Pages
    set -gx LESS_TERMCAP_mb '\E[01;31m'       # begin blinking
    set -gx LESS_TERMCAP_md '\E[01;38;5;74m'  # begin bold
    set -gx LESS_TERMCAP_me '\E[0m'           # end mode
    set -gx LESS_TERMCAP_se '\E[0m'           # end standout-mode
    set -gx LESS_TERMCAP_so '\E[38;5;016m\E[48;5;220m'    # begin standout-mode - info box
    set -gx LESS_TERMCAP_ue '\E[0m'           # end underline
    set -gx LESS_TERMCAP_us '\E[04;38;5;146m' # begin underline
end

渲染鱼

取代颜色,我获得了未解释的代码:     LS(1)用户命令LS(1)

\E[01;38;5;74mNAME\E[0m
       ls - list directory contents

\E[01;38;5;74mSYNOPSIS\E[0m
       \E[01;38;5;74mls\E[0m [\E[04;38;5;146mOPTION\E[0m]... [\E[04;38;5;146mFILE\E[0m]...

\E[01;38;5;74mDESCRIPTION\E[0m
       List information about the FILEs (the current directory by default).  Sort entries alphabetically if none of \E[01;38;5;74m-cftuvSUX\E[0m nor \E[01;38;5;74m--sort\E[0m is specified.

问题

这可能是由于我在fish中使用了错误的字符串文字变量语法:

set -gx LESS_TERMCAP_mb '\E[01;31m'       # begin blinking

原始bash是:

export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking

鱼的颜色编码的正确语法是什么?

1 个答案:

答案 0 :(得分:4)

您在bash版本中所做的是ANSI-C Quoting。这使bash在将序列设置为变量之前解释序列。因此LESS_TERMCAP_mb不包含文字字符串" \ E [01; 31m",但是由此指定的序列 - 特别是" \ E"是逃脱的角色。

在fish中,您要做的是在引号之外指定转义序列 - 请参阅the section on quotes in the fish documentation

set -gx LESS_TERMCAP_mb \e'[01;31m'

等等。

预览

fish man page highlight configuration