東アジアの文字幅が悲惨すぎる件について

たまには、ホッテントリーメーカーでタイトルを付けてみる。


この前から気になっていた件をmixiで聞いてみたら早速解決!

  • 問題点:vim で LANG=ja_JP.utf8 で編集すると、一部の記号でカーソル移動がおかしい(2文字幅なのに1文字幅と見なされるようだ)
  • 解決方法:set ambiwidth=double (デフォルト値はsingle)
  • 根本原因:Unicodeというと、CJK-Unificationがよくやり玉に挙げられるが、実は西欧系の文字ともunifyされており(まあ当然だわな)、矢印↑ とか ギリシャ文字β とかはunification対象で、文字幅が Ambiguous(文脈依存) という扱いになっている。アルファベットのA はFULLWIDTH LATIN CAPITAL Aなので、FULLWIDTH扱いで大丈夫。参考:wikipedia:東アジアの文字幅
  • 根本対策:とりあえず、/etc/vimrcを修正した(Fedora9)。ja以外の東アジア系言語でも同様にした物が標準のvimrcであれば問題ないのだが。
  if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
     set fileencodings=ucs-bom,utf-8,latin1
+    if v:lang =~ "^ja"
+       set ambiwidth=double
+    endif
  endif
  • 補足:あと、X上の端末で使っている人はその設定とか、screen使っている人はその設定とかいるらしいが、Xもscreenも使ってないので関係なし。