日本語入力モードでのカーソルの色

223 views
Skip to first unread message

tora

unread,
Mar 6, 2020, 12:24:36 AM3/6/20
to vim_jp
vim 8.2.343 をubuntu18.04 LTS のうえで使っています。
gvimrc には次の行がいれてあります。

if has('multi_byte_ime') || has('xim')
  " IME ON時のカーソルの色を設定(設定例:紫)
  highlight Cursor guifg=NONE guibg=Green
  highlight CursorIM guifg=NONE guibg=Purple
endif

i コマンドで入力モードになってから、日本語モードにするために、
mozc をひらがなに切り替えても、カーソルの色は変わりません。

このvimの :version で見ると multi_byte_ime も xim も + が
ついています。

vim のヘルブ CursorIM ではカーソルの色が変わるように
かいてありますが、これはバグでしょうか。

Yasuhiro Matsumoto

unread,
Mar 6, 2020, 10:47:48 PM3/6/20
to vim_jp
Input Method は何をお使いでしょうか。fcitx でしょうか?
また gVim は apt で入れた物と思って良いでしょうか?

といいますのも、gVim の CursorIM は Input Method から得た入力ステータスが
が仮入力の時に色を変える作りになっているのですが Input Method によっては
この仮入力のタイミングが大きく異なる物があるからです。
※ 例えば SKK 等がそれにあたります。

tora

unread,
Mar 7, 2020, 2:58:27 AM3/7/20
to vim_jp
input method はMozcです。

また :scriptnames でみると
/usr/share/vim/gvimrc .... これはvimのインストール時のもの
~/.vim/gvimrc ................. これは自作のものでここにかきこんである
の順で読み込んでいます。

Yasuhiro MATSUMOTO

unread,
Mar 7, 2020, 3:18:41 AM3/7/20
to vim_jp
colorscheme によっては CursorIM に対応していないものもありますが、どの colorscheme をお使いですか?

2020年3月7日(土) 16:58 tora <horinom...@gmail.com>:
--
このメールは Google グループのグループ「vim_jp」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには vim_jp+un...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/vim_jp/e8e95dbb-89be-4ab9-8f0c-e8c3e8c3474e%40googlegroups.com にアクセスしてください。

presuku

unread,
Mar 8, 2020, 11:41:36 PM3/8/20
to vim_jp
highlight CursorIM guifg=NONE guibg=Purple
を、Xubuntu 18.04.4、Gvim 8.2.357 with GTK3、fcitx + Mozcの環境で試しました。

set imstyle=1 (現在デフォルト、over-the-top) では、highlightが反映されないようです。
set imstyle=0 (昔の挙動、on-the-top) では、IMEがOnで文字列入力中のみ CursorIM が反映されるようです。
imstyleが追加されover-the-topがデフォルトになった段階で CursorIM が反映されなくなってしまったようです。

参考:
https://github.com/vim-jp/issues/issues/739
(imstyleが追加される以前の issue です)

ちなみに、上記のチケットの
https://github.com/vim-jp/issues/issues/739#issuecomment-112672421
パッチを当て、Linux GUIで imaf / imsfを有効にするパッチ (同issues #1130) を当て
imaf / imsfを適切に設定すれば imstyle=1 でも CursorIM が反映されます。
(しかし、一度 Insert Mode に入らないと行けない…)


2020年3月7日土曜日 17時18分41秒 UTC+9 Yasuhiro MATSUMOTO:
colorscheme によっては CursorIM に対応していないものもありますが、どの colorscheme をお使いですか?

2020年3月7日(土) 16:58 tora <horinom...@gmail.com>:
input method はMozcです。

また :scriptnames でみると
/usr/share/vim/gvimrc .... これはvimのインストール時のもの
~/.vim/gvimrc ................. これは自作のものでここにかきこんである
の順で読み込んでいます。




>Input Method は何をお使いでしょうか。fcitx でしょうか?
>また gVim は apt で入れた物と思って良いでしょうか?

--
このメールは Google グループのグループ「vim_jp」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには vim...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/vim_jp/e8e95dbb-89be-4ab9-8f0c-e8c3e8c3474e%40googlegroups.com にアクセスしてください。

presuku

unread,
Mar 9, 2020, 3:43:48 AM3/9/20
to vim_jp
> set imstyle=1 (現在デフォルト、over-the-top) では、highlightが反映されないようです
> set imstyle=0 (昔の挙動、on-the-top) では、IMEがOnで文字列入力中のみ CursorIM が反映されるようです
この表現は適切ではなかったです。
over-the-spot のときは、日本語入力中は fcitx 側で表示しているようで gvim のカーソルが見えてない状態です。
(preedit_get_status() は TRUE で返ります。 つまり preedit_is_active が TRUE とちゃんとセットされている)
この時 on-the-spot 時に表示されていたカーソル自体が表示されないので、結果として CursorIM が反映されてないように見えるようです。

(全体的に over-the-top → over-the-spot、on-the-top → on-the-spot と間違えてました…)

2020年3月9日月曜日 12時41分36秒 UTC+9 presuku:

tora

unread,
Mar 13, 2020, 4:59:15 AM3/13/20
to vim_jp
残念ながら私には全く理解することができません。
ただし、set imstyle=0 を追加するとつぎの動作になりました。

 1. i コマンドを打ち(この段階ではカーソルは緑)、
 2. mozcをひらがなモードにして(この段階でも緑)、
 3. 文字を打ち込むと変換の候補のプルダウンが現れ、カーソルは紫となる。
 4. 変換を確定するとカーソルは緑となる。
 5. この段階ではまだ、日本語入力モードなので、日本語を
  入力できる。


2. の段階で、紫になって欲しいのです。
また、4. の段階ではまだ、日本語入力モードのままであるので、
紫のままであって欲しい。
緑になるのは4.の後で、日本語入力モードから抜けた時点
であって欲しい。
(Windows  ではこのように
  なっていました。)



2020年3月9日月曜日 16時43分48秒 UTC+9 presuku:

presuku

unread,
Mar 14, 2020, 1:14:07 AM3/14/20
to vim_jp
> 残念ながら私には全く理解することができません。
すみません、これは CursorIM の色をつけるか判定している、
vim のソースコードの gui.c 内の gui_update_cursor関数で呼び出している
preedit_get_status関数の話でした。

> ただし、set imstyle=0 を追加するとつぎの動作になりました。
imstyle=0 でその様な挙動になると思います。
しかし、副作用があり . (ドット) リピートに不具合が出たり、
Normal mode で f, F, t, T, r 後や Insert mode で C-r 後で
IME On (日本語入力が有効) の場合、挙動が変わってきます。


> 2. の段階で、紫になって欲しいのです。
> また、4. の段階ではまだ、日本語入力モードのままであるので、
> 紫のままであって欲しい。
> 緑になるのは4.の後で、日本語入力モードから抜けた時点
> であって欲しい。
> (Windows  ではこのようになっていました。)
残念ながら現状では vim の修正せずに、gvimrc等の設定だけでWindowsと同じような挙動にはできません。

まとめますと、imstyle=0では CursorIM でカーソルの色が変わりますが
imstyle=1では CursorIM では、カーソルの色が変わりません。
(vimの内部的には変えているのですが、IM側がUIを上書き表示しているので、
3.の時に変更されたカーソルの色が表示されません)

最初の質問にあった、

> vim のヘルブ CursorIM ではカーソルの色が変わるように
> かいてありますが、これはバグでしょうか。
簡単に言ってしまえばバグです。
しかし、OSなど環境毎に事情が異なるので、ヘルプも不正確だとは思います。


2020年3月13日金曜日 17時59分15秒 UTC+9 tora:

tora

unread,
Mar 24, 2020, 10:51:12 PM3/24/20
to vim_jp
教えていただいた事をもとにgvimrcを色々と変更してみましたが、
期待通りにはなりませんでした。
開発者様に将来を期待することにします。

どうもお騒がせしました。

tora

unread,
Mar 24, 2020, 10:52:20 PM3/24/20
to vim_jp


2020年3月25日水曜日 11時51分12秒 UTC+9 tora:
教えていただいた事をもとにgvimrcを色々と変更してみましたが、
期待通りにはなりませんでした。
開発者様に将来を期待することにします。

どうもお騒がせしました。

Reply all
Reply to author
Forward
0 new messages