読者です 読者をやめる 読者になる 読者になる

「いいか、そうゆーの、おまえだけだかんね。そこいら辺、ちゃんとわかってる?」って教えられた現実。

vim の設定。
具体的には、ime の状態によってカーソル色が切り替る、という設定についてひとこと。

Pissed off
源氏物語 第二帖 帚木 第一章 雨夜の品定めの物語

つまり "それで何っ、オマエの望んだ色になる、思ってん(嘲笑" 、アポンが(涼

ime を捉えるのは、
mac *1の場合、
multi_byte_ime ではなく xim だと言う事を知った。

と、言うお話。...今更ですが。

自分の場合、.gvimrc に以下のような設定を挿し込んでおりました。 ;

if has('multi_byte_ime')
  " highlight Cursor guifg=NONE guibg=White
  highlight CursorIM guifg=NONE guibg=Red
endif

ところが、これだと mac では上手く効かないよ!、と言うこと。
でいいですか?

結論は、xim の方

正解、...と申しますか、答えは、こう言う事でありました。;

if has('xim') || has('multi_byte_ime')
  highlight CursorIM guifg=Black guibg=Red
endif

has('xim') の条件が必要。

ちなみに、mac 側からの目線で言うと、"...も"、ではないみたいです...

背景

IMEの状態に応じてカーソルの色を変える と言うこの設定、;

if has('multi_byte_ime')
    highlight Cursor guifg=NONE guibg=Green
    highlight CursorIM guifg=NONE guibg=Purple
endif
via. [Vim documentation - mbyte][10]

個人的には、かなり助けられていて、結構優先度の高い設定なのですが、
だからこそなのかもしれませんが、ある時から、切り替わらなくなっていることに気付くのです。

そのタイミングは確か、
os を mavericks にした時か、vim の version が 7.4 に上がった時かのどちらかのような気がするのですが、...気がする、と言った程度でハッキリと特定できない orz*2

最初は、何か仕様的な深いレベルで変わったからかも、と思うことで、
「この手のレベルまで来ると自分には到底手に負えるようなものではない筈」と強く信じ、...放置 :-p

ゆ、事で、
たぶん同じような所で悩んでらっしゃる方がいて、何方かが何処かでレポート上げてくれるだろう、と、完全 "待ち" モードに(笑

そんなこんなで待つこと、この他力本願も成就wwwすることなんぞなく(アホ、
案の定、増える入力ミスに心理的にでだけではなく身体的にも結構ストレスが溜まっていく。

そこで、上の方からこみ上げるような(笑 声が。
「え? おまえ、"みんなも..."、って本気で思ってんの?」
あんたと一緒? 何勘違いしてんの? 何様のつもりなの? つか、どこまで図々しいの? ばかなの? そんあkdjfぁkjg;おえいjrjkvc。。。ああぁ

とゆことで。
つい先日、腰を据えて考えてみる事に。

+multi_byte_ime Win32 IMEサポート、え?

どこから調べて良いモノか分からない...

ととりあえず、一番気になる has('multi_byte_ime') の内容を解剖してみっか、と :h multi_byte_ime

でビシッと飛んだのが、そのタイトルに記載したトコ。*3
うぃ、...うぃんんん?

そもそも、な話?
今まで何の疑いもなく、言われるがままに、if has('multi_byte_ime') ... なんて書いてましたが、正にこれが大きな勘違いの素。

見ている multi_byte_ime、これは windows のモンで、mac ではこの子じゃない?

とここで、合点がいったこと一つ。
自分は vim を、win と mac と双方の環境において、ほぼ同時進行で使うと言う二重生活を強いられてるのですが、*4
win では、上手く切り替わっていたのです。

じゃぁ、macosx では、何を見れば良いのかしら? と。

もしくは has('xim') なの?

同様の設定を、他の方々はどうしているのか、をまず見てみる事に。

先にも書きましたが、この手の設定は様々な所で紹介されています。
自分の場合ですと、ブックマークを辿ると*5、こちら。;

» IMEの状態でカーソルの色を変更する

そして、他を色々見てみると、こういう書き方も目にするのです。一つの例として。;

if has('multi_byte_ime') || has('xim') 
    highlight Cursor guifg=NONE guibg=White
    highlight CursorIM guifg=NONE guibg=DarkRed
endif
via. [Vimで日本語の切り替えで毎回っっっっっっってなる対策 - さよならインターネット][41]

xim とゆヤツ、見てる。

どうやら、
if has('multi_byte_ime') と、
if has('multi_byte_ime') || has('xim') との 2 通りの書き方があるみたい。だと。

そもそも。
xim って何? って話になりますかね。*6

XIMはXの国際化入力機構である。Xlibユニット型と|IM-server| (Input-Method server) 型の2種類がある。|IM-server|型はCJK(日中韓)で使われるような複雑な入力方式に適している。

ってらしい by :h mix。よーわからん orz

xim と言うのは、開くと 'X INPUT METHOD' と言うらしく、
X Window Systemにおけるテキスト入力のためのAPIなのだと。

x window system って、あの?

xim って。

みたいですね、どうやら。

この解釈の仕方が、正しいかは勿論、自信ないのですが、;

  • 'x input method' は、'x window system' での話であり。
  • この 'x window system' 言うのは、自分らが知るところの 'x11 (xquartz)' のことみたい。
  • で、この 'xquartz' は os x の構成要素のひとつとして、なんちゅーかアレな関係に元々あるので。
  • そんなことから、mac の場合、'xquartz' にある 'xim' を見るんだ。

"MS-Windowsでの入力" である multi_byte_ime じゃなくて。

な辿り方で良いのでしょうか。
勿論乱暴に。

でも。

mavericks になってから xquartz の配給スタイル変わって、切り離されたでしょ?
自分の場合、xquartz 入れたからこうなってん?
xquartz ないケースは、もしかして?

...とか色々気になってきて。
そんなことから、間違っているのかもしれませんが、試していません。

そして、一応こゆトコも見つけました。メモとして。;

The internationalization in the X Window System Version 11, Release 5 (X11R5) provides a common API which application developers can use to create portable internationalized programs and to adapt them to the requirements of different native languages, local customs, and character string encodings (this is called "localization"). As one of its internationalization mechanisms X11R5 has defined a functional interface for internationalized text input, called XIM (X Input Method).

何か、
x11 の r5 における国際化の活動として、それこそ国際化、ローカライゼイションをターゲットに共通 api を用意しました。
と、その一環として文字入力の機構として xim (x imput method) がありましたとさ。

な、様子らしいです。
xim としては、これ以上これ以上深入りする気、と言うか出来る気しないので、これくらいにしようと思ってます。

ま、自分的には、
macos x として捉えるのは、xim でよろしいのでは、と言う事が雰囲気として(? 腑に落ちただけで宜しいかと。

バカとかウソ言っていたら、ほんっと突っ込んでください。

実際覗いてみればよい

って、もっと先にやってはいたのですが...

実際の値を確認してみました。

まず macvim-kaoriya。ver は 7.4
:echo has('multi_byte_ime') は "0"。
:echo has('xim') は "1"。

そして vim-kaoriya、32 bit 版。こちらも :ver は 7.4。
:echo has('multi_byte_ime') は "1"。
:echo has('xim') は "0"。

と言う事。
なるほど、今までの条件では win は拾っても、mac は拾わない、となるのですね。

この事から、ime と言うか input method として拾うべきターゲットは、mac と win では異なっていて、
今までコレだと思っていた multi_byte_ime ではなく、
mac の場合は xim なのですね。

個人的には、これを知った事で、それなりにスッキリであります。

極端は話ですが、自分の mac os x の環境で、これでもイケました。 ;

if has('xim')
  highlight CursorIM guifg=Black guibg=Red
endif

これがいいか、わるいかは判断しかねます。
が、少なくとも mac os x の環境では、xim を見ていると言う事を確認できる、思うに結構強烈な事象かと。

multi_byte_ime ではなく。

さいごに ; if has('multi_byte_ime') 派と if has('multi_byte_ime') || has('xim')

一応、この度参照させて頂いたエントリ。 まずは、if has('multi_byte_ime') 派。;

» vim gvimの色設定について - fudist
» Vimを使う上でのIME(日本語入力)の取り扱い - rcmdnk's blog
» Vimの日本語入力を快適にする設定 MBA-HACK

if has('multi_byte_ime') || has('xim') 派。;

» Vimで日本語の切り替えで毎回っっっっっっってなる対策 - さよならインターネット
» Vimの使い方-Tips
» vimの日本語入力中のカーソルカラー変更 - think and error

うーん、でも。
if has('multi_byte_ime') 派の中でも、ここに載せさせて頂いたサイト以外でもそうなのですが、文脈的に os x ターゲットで書いているのもあって。

と今、もっと先に書いておくべき事を思い出しました。
自分も、os および vim、どちらかハッキリは言えないのですが、どちらか version up 以前は、何も問題なかったのです。

要因が、
vim 側で持っているのか、それとも os 側にあるのか分かりません。と言うか、調べてません、と言う方が正しいでしょう。
すみません、今はやです。

おわりに ; ime "off" 時の色が、デフォルトでよかったら

highlight Cursor の方、特に定義しない、と言うの選択を考えても良いと思うのです、って話を付け加えておこうかと。

これ結構見受けられる設定なのですが、
カラースキーマが、背景暗く/文字を明るく、なセッティングなのに、
highlight Cursorguifg=NONE guibg=White と設定している方。

これじゃカーソル位置にある文字の色同化しちゃって、見にくいどころか、見えなくしちゃってんじゃ、と思って見る度に不思議に思っています。

自身、実は一番最初、colorscheme は molokai の中で、この guifg=NONE guibg=White やって悦に入ったクチでして(笑
設定反映してパチパチやってミぃーーん動かして、「ん、ん? 何やってんだオマエ?」と気付い、言うか、気になったのですよ。

最初は
他の color 設定みたく、反転 reverse なパラメータ使えるかなー、思って探したら、どうやらないようで、
で苦し紛れに guifg=Black guibg=White していたのですが。

highlight CursorIM の方しか設定していない方がいらっしゃることに気付いて、膝を叩いたのです。

なので、冒頭の自分の設定としてあげた記述は、
highlight Cursor ... の行をコメントしておりますが、実際は消してます。

何となく、顕在化しておいた方がいいかと思いまして。
勿論、自身の弱い記憶のために...すみません(笑。

と、そんなで、 はい、おしまい。
わ、結構書いたな。

*1:..と言うよりは "macvim kaoriya で"、って言った方良いのでしょうか

*2:まぁ、する気もなかったりするのですがwww

*3:と申しかすか、multi_byte_ime

*4:オフィスでは win マシン、プライベートでは mac と言う罰ゲーム受けてていて、その何れの環境においてもメインエディタとして vim を使っていたりする。勿論、同じ rc ファイルで、いずれも最新 ver で、同じ vim 環境を構成しています。

*5:自分は pinboard.in を使ってます。

*6:いつもなら、じゃ、おいそれよ、と何も考えず 'has('xim')' をピコっと付け加えるのですが、何か今回は、そうやっても上手く行かなかった時の無力感に耐えられないような気がして、きちんと見て見る事に。