2015年1月23日金曜日

[cygwin][linux] lvで複数の文字コードが混在する環境で簡単に文字化けを回避する

複数の文字コードを扱う環境では「文字化けで読めない・・・、editorで開き直そう。」という煩わしい作業が頻繁に発生しているのではないでしょうか。該当する方はlvというコマンドを利用すれば幸せになれますので是非一度試してみてください。

lvは入力された文字コードは自動判別し、出力するコードはLANG環境変数で指定している文字コードに変換してくれるので、どんなファイルを与えても文字コード指定なしで意図通り表示してくれます(すばらしい!)。

環境変数に以下の設定をしておけば、manやgitからもlvが利用されるようになります。-cは文字装飾用ANSIエスケープシーケンスに対応するためのオプション指定です。
 
PAGER='lv -c'


もし自動判別に失敗する、もしくは、LANGで指定していない文字コードで出力したい、といった特殊なケースには、-Iで入力、-Oで出力する文字コードを指定できます。
 
       coding-system:
              a: auto-select
              c: iso-2022-cn
              j: iso-2022-jp
              k: iso-2022-kr
              ec: euc-china
              ej: euc-japan
              ek: euc-korea
              et: euc-taiwan
              u7: UTF-7
              u8: UTF-8
              l1..9: iso-8859-1..9
              l0: iso-8859-10
              lb,ld,le,lf,lg: iso-8859-11,13,14,15,16
              s: shift-jis
              b: big5
              h: HZ
              r: raw mode

例えば、入力をeuc-japan、出力をshift-jisに指定したい、といった場合には以下のオプションを与えればOKです。
 
% lv -Iej -Os euc.txt


自分にとって唯一残念なのがlessの-X(--no-init)オプションに相当する機能が用意されていない点です。lessだと-Xオプションを指定しておくとlessで表示していた画面がlessをquitした後もそのままの状態でターミナル上に残ります。lessで情報を表示した後に、それを参照しつつコマンド実行する、というケースにはこの機能が必須なのですが・・・

参考:

0 件のコメント:

コメントを投稿