less で日本語コード自動認識と source-highlight

Ubuntu (18.04 LTS) (含 WSL)

sudo apt install source-highligh nkf

以下のような /usr/local/bin/lesspipej.sh を作成。

#!/bin/bash
# Ubuntu では、/bin/sh ではダメ。
ORIGINAL_LESSOPEN=/usr/share/source-highlight/src-hilite-lesspipe.sh
CONV_UTF8_COMMAND="/usr/bin/nkf -w"

conv_utf8() {
    $CONV_UTF8_COMMAND "$1"
}

if [ $# -eq 0 -o "$1" == "-" ] ; then # pipe
    conv_utf8 - 2> /dev/null
else                                  # file
    if [ -x $ORIGINAL_LESSOPEN -a `$ORIGINAL_LESSOPEN "$1" | head | wc -c` -gt 0 ] ; then
        $ORIGINAL_LESSOPEN "$1" | conv_utf8 - 2> /dev/null
    else
        conv_utf8 "$1" 2> /dev/null
    fi
fi

.bashrc とかに

export LESSOPEN="|/usr/local/bin/lesspipej.sh %s"
export LESS="-j10 -R --no-init --quit-if-one-screen"

色味の変更は

/usr/share/source-highlight/esc.style

macOS

brew install less nkf
brew install source-highlight

以下のような /usr/local/bin/lesspipej.sh を作成。

#!/bin/sh
ORIGINAL_LESSOPEN=/usr/local/bin/src-hilite-lesspipe.sh
CONV_UTF8_COMMAND="/usr/local/bin/nkf -w"

conv_utf8() {
    $CONV_UTF8_COMMAND "$1"
}

if [ $# -eq 0 -o "$1" == "-" ] ; then # pipe
    conv_utf8 - 2> /dev/null
else                                  # file
    if [ -x $ORIGINAL_LESSOPEN -a `$ORIGINAL_LESSOPEN "$1" | head | wc -c` -gt 0 ] ; then
        $ORIGINAL_LESSOPEN "$1" | conv_utf8 - 2> /dev/null
    else
        conv_utf8 "$1" 2> /dev/null
    fi
fi

.bashrc とかに

export LESSOPEN="|/usr/local/bin/lesspipej.sh %s"
export LESS="-j10 -R --no-init --quit-if-one-screen"

ちなみに,私は20世紀の昔から tcsh なので,~/.tcshrc

setenv LESSOPEN '|/usr/local/bin/lesspipej.sh %s'
setenv LESS '-j10 -R --no-init --quit-if-one-screen'

色味の変更は

/usr/local/share/source-highlight/esc.style

Monokai 的 esc.stye の例

WSL Ubuntu だと,以下のように b をつけないと暗かった。

// monokai like
keyword red b ;
type, classname cyan b ;
string yellow b ;
regexp orange b ;
specialchar purple b ;
comment black b ;
number purple b ;
preproc red b ;
symbol white b ;
function green b ;
cbracket gray b ;
variable blue b ;

macOS の場合は b をつけるとボールドばかりになるので,適宜調整。たとえば,「ターミナル」の「環境設定…」メニューで,

□ ボールドフォントを使用
のチェックをはずし,
□ ボールドテキストに明るい色を使用
にチェックを入れるとかして,対応してみる。

ちなみに,esc.style で使える色は以下のみ。また,Windows の Cmder ではそもそも256色非対応なので,Monokai カラーテーマ的色合いはできない,残念。

colormap
"green" "#33CC00"
"red" "#FF0000"
"darkred" "#990000"
"blue" "#0000FF"
"brown" "#9A1900"
"pink" "#CC33CC"
"yellow" "#FFCC00"
"cyan" "#66FFFF"
"purple" "#993399"
"orange" "#FF6600"
"brightorange" "#FF9900"
"brightgreen" "#33FF33"
"darkgreen" "#009900"
"black" "#000000"
"teal" "#008080"
"gray" "#808080"
"darkblue" "#000080"
default "#000000"
end