2009/04/28

VIMのUTF-8化

私はVIM使いである. Win32ではgVim, Cygwin上ではVim, Linux上でもVim
という具合である. (どれもバージョンは7.2)
最近, 中国語の勉強を再開したので, 中国語の文字を入力したくなった.
が, これまでは日本語と英語しか使わなかったので, VIMの設定はJISかCP932.
UTF-8化はしていなかった.
(もちろん, コード変換の設定はあるので, UTF-8も日本語としての表示は可能)

備忘録として, 設定内容をメモ

参考
http://d.hatena.ne.jp/thinca/20090111/1231684962
http://kariyam.blog122.fc2.com/blog-entry-31.html


まずは, 表示すべきメッセージがUTF-8でないと始まらない.
VimのLangパッケージをダウンロード
ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz

展開して, vim32/src/po配下のja.poをUTF-8化

$ nkf --utf8 ja.po > ja.UTF-8.po

続いて, poをmoに変換.
$ msgfmt -o ja.UTF-8.mo ja.UTF-8.po
<エラーメッセージがつらつら>

ここではまった. 参考URIの2つめが役になった.
そこにかかれているとおり, langパッケージのMake_cyg.makに
説明はあるのだが, 何が行われているかというと...

vim72/src/poにおいて....
$ make -f Make_cyg.mak ja.mo
OLD_PO_FILE_INPUT=yes /bin/msgfmt -v -o ja.mo ja.po
1708 個の翻訳メッセージ.

という感じで実行され, オプションが違うことが分かる.
よって, 変換には, 以下のコマンドを使う.

$ OLD_PO_FILE_INPUT=yes /bin/msgfmt -v -o ja.UTF-8.mo ja.UTF-8.po
1708 個の翻訳メッセージ.

このja.UTF-8.moをvim.moに名前を変更して,
$VIMRUNTIME/lang/ja_JP.UTF-8/LC_MESSAGES
に置く. $VIMRUNTIMEは, Windowsだと, C:\Program Files\Vim\vim72
あたりだろう.
(参考: これ(lang.zip)を$VIMRUNTIMEに展開してもOK. )

2010/Aug/27 追記: Vim 7.3用lang.zip


さて, 続いては, .vimrcでの設定.
私の場合, CygwinとLinux上では他のファイルのエンコーディングの問題が
出ると思われるので, さしあたっては, 現状と同じエンコードを引き続き
使用したい.

ということで,
if has('win32')
  let $LANG='ja_JP.UTF-8'
  set encoding=utf-8
endif
を追加.

うん. 画面上には日本語が文字化けせずに出るようになった.

しかし, またはまった. メニュー部分が文字化け中.
いろいろと調べたら, Vim自身のlangmenuのヘルプに書いてあった.
This option must be set before loading menus, switching on filetype
detection or syntax highlighting.  Once the menus are defined setting
this option has no effect.  But you could do this: >
 :source $VIMRUNTIME/delmenu.vim
 :set langmenu=de_DE.ISO_8859-1
 :source $VIMRUNTIME/menu.vim

This optionが指しているのは, langmenuのことね.

ということで, .vimrcの前の方に, 以下を追加
" メニュー等でUTF-8を使用するようにする
" This option (langmenu) must be set before loading menus, 
" switching on filetype detection or syntax highlighting.
" もしくは下記2行を実行する
"  source $VIMRUNTIME/delmenu.vim
"  source $VIMRUNTIME/menu.vim

if has('win32')
  let $LANG='ja_JP.UTF-8'
  set encoding=utf-8
  "set langmenu=ja_jp.cp932
endif

PS
Vim内部でのエンコーディングの扱いは, ↓に詳しい説明あり
http://d.hatena.ne.jp/ka-nacht/20080220/1203433500

PS
上記によるとfileencodingは, setで行うと副作用があるので,
setlocalで行った方がよいらしい.
ちなみに, setglobalというコマンドもある.
http://whileimautomaton.net/2008/01/diary#d14-011600

0 件のコメント: