less で日本語コードを自動判別して文字化けせずに表示するには

Homebrew でインストールした less を使って日本語コードを自動判別して,字化けせずに表示する方法。

参考:

brew install less lesspipe

以下のような lesspipej.sh/usr/local/bin に作成し,chmod +x しておく:

#!/bin/sh

ORIGINAL_LESSOPEN=/usr/local/bin/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

環境変数 LESSOPEN を設定する。

tcsh/csh系:

setenv LESSOPEN '|/usr/local/bin/lesspipej.sh %s'

bash系:

export LESSOPEN="|/usr/local/bin/lesspipej.sh %s"