Hatena::ブログ(Diary)

diary of firisu

2012-09-24

Vimで全角記号を扱うと色々とおかしくなる

  • 全角記号をまたぐとカーソル位置がずれる
  • 全角なのに1文字の表示幅になっている
  • DeleteやBackspaceで消せない

症状としてはこんな感じ。ASCIIのみしか対応していないアプリケーションではありがちな事象である。

以下の設定で対処可能。

set ambiwidth=double

なお全角文字専用の設定であり副作用はないので .vimrc に書いてしまうと良い。

追記(2012/11/30)

ASCIIのみしか対応していないアプリケーションではありがちな事象である」とか通ぶったこと書いたけど、後になって調べてみたら East Asian Width 問題によるものだと分かった。

難しい問題なので箇条書きに説明すると

  1. Unicode には文字種という概念があり、文字ごとに半角と全角を定義している
  2. 文字種には Ambiguous(あいまい) という区分があり、これは「ロケールによって半角・全角が変わる」ことを表す
  3. また東アジアの文字種においては、Ambiguous の文字は全角として扱うようになっている
    • 逆に言えば東アジア以外における Ambiguous は半角である
  4. 上記の Vimオプションは、Ambiguous を全角として扱うものである
  5. よって、上記のオプション指定によって全角記号を正常に扱えるようになる

というわけだ。

副作用はないと書いたが、東アジア人である限り副作用はないという言い方の方が正確である。

しかし文字コード周りは本当にややこしくて調べるのが大変だ…。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/firisu/20120924/1348487277