Thursday 28 March 2013

vim で日本語が中途半端に文字化け (solved)

時々ぼやいてた vim で日本語が妙な文字化けをする件,突然解決したのでご報告.

まずもともとどういう状況だったかという話.端的に言えば
「たとえば日本語の文字が,'encoding は合ってるのに'  '中途半端に' 化ける.」
 たとえば,
簡単なチェック.English
と書かれた文書を開くとこう表示される:
簡~M~X~A�~C~A~B�~C~C~B�~NEnglish
vim で文字化け,となると encoding の情報ばかりでてくるので,その辺で色々やってみたが解決しない.
結局全部 utf-8 で揃っている上,ここでいうと 「簡」はちゃんと表示されてるし,
長い文章でもところどころこうして漢字がちゃんと出てくるところをみると,
どうもそのへんのことではなさそうだ.

うーんそうなるとなんか知らんけどフォントとかそのへんかしら,
などと思いつつ,時々検索したりはしながらまあ日本語含むのは gedit でいいや,
というわけでこんにちに至るまで解決されなかったわけですが.

結論:"僕のインストールしてた vim の設定ではマルチバイト非対応!" (^^)!!
えっ
$ vim --version
を実行した結果がこちら:

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Jun  4 2012 20:45:16)
Included patches: 1-538
Compiled by ******@**********
Normal version without GUI.  Features included (+) or not (-):
-arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent 
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
-conceal +cryptv -cscope +cursorbind +cursorshape +dialog_con +diff +digraphs 
-dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path 
+find_in_path +float +folding -footer +fork() +gettext -hangul_input -iconv 
+insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent 
+listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape 
-mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse 
+mouse_xterm -mouse_urxvt -multi_byte +multi_lang -mzscheme +netbeans_intg 
+path_extra -perl +persistent_undo +postscript +printer -profile -python 
-python3 +quickfix +reltime -rightleft -ruby +scrollbind +signs +smartindent 
-sniff +startuptime +statusline -sun_workshop +syntax +tag_binary 
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
 -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo 
+vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp
(後略)
燦然ときらめく-multi_byte . そこで ~/vim(どこでもソースを clone してあるとこ)で
$ ./configure --enable-multibyte
$ make 
# make install
で解決.#はルート権限, $ sudo でもよろしい. 一行目は
$ ./configure --with-features=big
でもよい模様(いろいろくっついてくる).
実は最初こっちでやりかけて # make install を忘れてて何も起こらず,
multibyte でやり直したときに気がついた.

仏語の ç など一部の文字化けと,é とか打った時に2文字分スペースができてしまう問題も解決.
そもそもこの解決策にいきあたったのが仏語の方を調べてた時だった.
(英語で情報集めるなら日本語が云々より仏語が云々のほうが多いだろうという).
そして è とかその辺は全く問題なく表示されてたので盲点でもありましたねー.
しかし $ vim --version はやったことがあったはずなのにどうして気づかなかったのか.


一応参考サイト:

Vim - General - French characters (how?)
 :  最初に行きあたって
1. Most of the following applies only to Vim versions with multi-byte
(actually, multi-encoding) support:

        :echo has("multi_byte")

should return 1.
で僕を !!!!!!!!!! の海に投げ込んでくれたところ.僕の環境では平然と 0 を返してきた.

vimrc - Vim doesn't support unicode? - Stack Overflow
 : 上のを踏まえて.$ ./configure --with-features=bigが紹介されてる.

ソースインストールvimで日本語が文字化け - マツモブログ
 : そういうことかとわかって検索すると行きあたるものです.


と,いうわけで,日本語を扱う文書を書くときに vim がいいのかどうかは別にして,
めでたしめでたし.

ところで過去記事漁ると僕 vim はソースからインストールしてたのか……? 完全に忘れてた…

2 comments:

  1. FreeBSD 9.1Rな環境で、ports にて vim 7.3-lite(X11サポート抜きのvim) をソースコードから構築すると、何故か同じような中途半端な文字化けが起きて原因判らなかったですが、ここに記載されている内容で解決できました。

    情報提供どうもです。

    ReplyDelete
    Replies
    1. お役に立てたようで嬉しいです.コメントでお知らせくださってありがとうございます!

      Delete