VimのQuickFixモードで読み取る文字コード(エンコーディング)
MS VC++のcl.exeが常に日本語メッセージをShift-JISで出しくさるとか,cygwinのmakeがデフォルトではやはり日本語メッセージを出しくさるとか,うざい状況が色々ある.VimのQuickFixモードではエディタ内でそれらのコマンドを実行し,帰ってきたエラー・メッセージを解釈してエラーの行にジャンプとか便利な機能が色々あるのだが,それが文字化けでうまく働かなくなってしまう.Vimには様々な部分でテキストのエンコーディングを変更したりするオプションがあるがQuickFixには付いてない.そこで外部のフィルタ(とりあえずnkf)を噛ませる.多分,以下が最も楽で汎用性がある.
set shellpipe=2>\&1\|/tex/bin/nkf\ -w>%s
'&' と '|' はVimスクリプトで特別な意味を持つのでオプションの値に含めるには '\' でエスケープしなければならない.要するに(例えば)
/cygwin/bin/make -kr 2>&1|/tex/bin/nkf -w>(一時ファイル)
のようにコマンドが実行される仕掛け.私はVim全体の基本となるエンコーディングとしてUTF-8を使っているのでnkfにもUTF-8で出力させている (-w
).nkfはTeXのall-in-oneインストーラで一緒に入った(んだっけ?)やつを使ってみた.
- http://www.forest.impress.co.jp/article/2007/05/22/texinstaller.html 窓の杜 - 【NEWS】「TeX」の利用環境を自動でダウンロード・インストール「TeXインストーラ3」
なおMS .NET FrameworkのC#コンパイラ csc.exe だとUTF-8で出すオプションが一応ある.本当は扱いやすい英語がいいんですが...
- http://msdn.microsoft.com/ja-jp/library/d5bxd1x2.aspx
/utf8output
(UTF-8 を使用したコンパイラ メッセージの表示) (C# コンパイラ オプション)
またGNU gettext系だと日本語メッセージを格納している /usr/share/locale/ja/LC_MESSAGES/foo.mo
(Cygwinなら\cygwin\usr\share\locale\ja\LC_MESSAGES\foo.mo
)を foo.mo.bak
にリネームしてしまえば「make: 入ります ディレクトリ」とかの悪名高い*1うざい翻訳メッセージを目にしなくて済む(翻訳者の方,すみません...).
*1:今はもう直ってるみたい?