Vim を less の代わりとして使える less.vim/less.sh というスクリプトで、標準入力の文字コードを指定する方法を調べてみた。
文字コードの自動判別が間違った場合などに、Vim でファイルの文字コードを指定して開き直すには、通常以下のようにすればよい。
:e ++enc=iso-2022-jp
しかし、標準入力を読み込む場合は、:e による再読み込みができない。autocmd を使って、標準入力からの読み込み直前に fileencodings を指定の文字コードに固定してしまうのが良さそうである。なお、less.sh に引数を指定した場合、標準入力から読み込むためには - の指定が必須である。
$ foo bar | less.sh --cmd 'autocmd StdinReadPre * set fileencodings=iso-2022-jp' -
あるいは、短縮形を使って以下のようにする。
$ foo bar | less.sh --cmd 'au StdinReadPre * se fencs=iso-2022-jp' -
日本語ならば、fencs には、utf-8, cp932, euc-jp, iso-2022-jp などを指定することになるだろう。
しかし日本語に限定するなら、nkf 等を使って文字コードを utf-8 にでも変換して読み込ませた方が楽だ。
$ foo bar | nkf -w8 | less.sh