vim-jp / issues

有志で既知のバグや要望を検討・管理し、オフィシャルへの還元をしていきます。
https://vim-jp.org/
342 stars 11 forks source link

Windows版gVimで、fキーで日本語入力モードになってしまう。 #735

Closed JuraCureMihawk closed 9 years ago

JuraCureMihawk commented 9 years ago

[モード] ノーマルモード

[操作手順(入力キー)]

  1. "f" or "F" or "t" or "T" (いずれか1つ)
  2. "半角/全角" (左上、ESCキーの直下) 以上

[現象] 以降の操作で "f" を押下すると、ノーマルモードのままで日本語入力モードになる。 (F, t, Tでも同様に発生。)

[回避策] 挿入モードに移った後、ノーマルモードに戻る。

k-takata commented 9 years ago

gvim -u NONE -U NONE -N で起動した場合でも発生しますか? gvimのバージョン、Windowsのバージョン、使用しているIMEなどの情報もお願いします。

mattn commented 9 years ago

vimrc に以下を足して貰えますか

if exists('&iminsert')
  set iminsert=0
  set imsearch=0
endif
JuraCureMihawk commented 9 years ago

@k-takata gvim -u NONE -U NONE -N でも発生しました。

バージョン情報 gvim: 7.4.648 Windows: Windows7 Professional 32bit IME: Google日本語

@mattn vimrc に足してみましたが、発生しました。 gvimrc でも試しましたが、同様に発生しました。

nb1839 commented 9 years ago

関係するのは iminsert の方だけのようで 7.4.727 990L normal_cmd() の

    if (curbuf->b_p_iminsert != B_IMODE_LMAP)
        im_save_status(&curbuf->b_p_iminsert);

で b_p_iminsert が B_IMODE_IM に差し替えられて次回も強制的に IM がオンになっているようです。

一応、iminsert=1 であればご期待の動作になるような気がしますがどうでしょうか?

mattn commented 9 years ago

すみません。間違ったコメントしたので消しました。 僕の環境だと再現しないんですよね。

ynkdir commented 9 years ago

:version+multi_byte_ime が付いてないとかですかね。 つまりコンパイル時に IME=yes を指定してない。

k-takata commented 9 years ago

以降の操作で "f" を押下すると、ノーマルモードのままで日本語入力モードになる。

これですが、fで検索すべき文字の入力を待っている状態で日本語入力モードになることを指していますか? そうだとすると、fやインサートモードに入ったときに、以前の日本語入力モードの状態が復元されるのは仕様だと思います。 f等で必ず半角入力とするには、例えば以下のような設定はどうでしょうか。

nnoremap f :set iminsert=0<CR>f
nnoremap F :set iminsert=0<CR>F
nnoremap t :set iminsert=0<CR>t
nnoremap T :set iminsert=0<CR>T
mattn commented 9 years ago

@ynkdir あーなるほど ImmAssociateContext か。

JuraCureMihawk commented 9 years ago

@nb1839 vimrc に足してみましたが、現象は変わりませんでした。

@ynkdir +multi_byte_ime はついていました。

@k-takata はい。次のキー入力を待っている状態で日本語入力モードになります。 nnoremap をvimrcに足してみましたが、現象は変わりませんでした。

h-east commented 9 years ago

少なくとも @k-takata さんが提示した設定(fのみ)をして起動したgvimでf入力時に日本語入力モードになることはなくなりました。

gvim -N -u NONE -c "nnoremap f :set iminsert=0<CR>f"

バージョン情報 gvim: 7.4.648 32bit Kaoriya版 Windows: Windows7 Professional 32bit IME: Microsoft IME (10.1.7601.0)

@JuraCureMihawk 実際にやった内容(Vim起動、入力したコマンド)をここにコピペしてもらえますか。

presuku commented 9 years ago

横からすいません。 Windows版gVimで、fキー等で日本語入力モードになり、 そしてその後、そのまま何か入力して漢字変換などして確定すると、その文字に飛べるのは、 むしろ、Windows版gVimの利点だと思います。(Linuxだと素のOnTheSpotだとできなかったと思うので)

@k-takata さんの書かれている通り、これは仕様だと思います。 なので、"f" or "F" or "t" or "T" の後に、半角/全角を押さないようにするか、 日本語入力モードになってしまっても、そのまま、もう一度半角/全角を押せば、 挿入モードにしなくても、日本語入力をOFFにできます。 (今すぐ、確認できるWindows版のGvimが7.2.411という古のバージョンなので、現状とは違うかもしれませんが…)

h-east commented 9 years ago

@presuku ご意見ありがとうございます。私も仕様だと思ってます。(言われている挙動はGVim 7.4.648でも同じです)

今は仕様かどうかとは別に、@JuraCureMihawk さんの環境で現象が変わらなかったけど私のとこでは現象が変わったので、どこが違うのかを調べてクリアにしようとしています。

presuku commented 9 years ago

@h-east さん、@JuraCureMihawk さんの最初の手順を見ると

[操作手順(入力キー)]
1. "f" or "F" or "t" or "T" (いずれか1つ)
2. "半角/全角" (左上、ESCキーの直下)
以上

と、あるので、f等で入力待ち状態になった時に、2. "半角/全角" (左上、ESCキーの直下)で、 日本語入力がONになってしまう事自体を、問題ととらえてるのかなと思いました。

gvim -N -u NONE -c "nnoremap f :set iminsert=0<CR>f"の様にfをマップして、 以前の日本語入力の状態をOFFにしても、2. "半角/全角" (左上、ESCキーの直下)を押したら、 結局、日本語入力モードになってしまうかなと。

h-east commented 9 years ago

と、あるので、f等で入力待ち状態になった時に、2. "半角/全角" (左上、ESCキーの直下)で、 日本語入力がONになってしまう事自体を、問題ととらえてるのかなと思いました。

あっ!自分で "半角/全角" キーを押すってことだったのですね!!勘違いしてました。 ご指摘Thanksです。

ということで「それは仕様です」で終了ですかね?

mattn commented 9 years ago

f の後日本語(文字)が検索できるという仕様ですね。

nb1839 commented 9 years ago

私は「f で日本語検索した後、カーソル移動後また f をやったら勝手に IME on になっちゃうんですが?」 と読んじゃってました。 昔の vim (というか jvim3.0) では f で検索後は自動的に IME off にしているので てっきりそういう類の挙動の話だとばかり。。。どうも失礼しました。

JuraCureMihawk commented 9 years ago

皆さん、色々なご意見ありがとうございます。 f → 半角/全角キーをESCで中断させたため、再度 f を押した際に中断した所から再開しているってことですね。 自分の先入観で障害と判断していました。 失礼致しました。

mattn commented 9 years ago

関連: https://groups.google.com/forum/#!topic/vim_dev/rqhhpOZuOmM