Vimで日本語入力をしているとノーマルモードに戻ったと時に 毎回IMEをoffにしてやらないとコマンドが打てません。 これはかなり面倒なのでノーマルモード移行時に 自動的にIMEがoffになるようにしたい所で、 その辺りのまとめというか、自分設定とついでに見つけた情報の寄せ集め。
- MacでKarabiner(KeyRemap4MacBook)を使ってIMEをノーマルモードで必ずオフにする
- macOS SierraでIMEをノーマルモードで必ずオフにする
- Windowsでyamyを使ってIMEをノーマルモードで必ずオフにする
- GVimで出来る設定
- 日本語固定モード
- Tera Termでの制御シーケンスの使用
- WindowsでAutoHotkeyを使う方法
- IMEの状態でカーソルの色を変更する
- IMEのON/OFFをsyntaxで制御する
MacでKarabiner(KeyRemap4MacBook)を使ってIMEをノーマルモードで必ずオフにする
MacではKarabiner(旧)KeyRemap4MacBook)を使ったキーリマップで ノーマルモードに戻るときにESC/ctrl-[を押した際 IMEをオフにするようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
ターミナル(含iTerm)及びVim(含MacVim)上で有効になります。
最後にESCを2回使っているのは文字を変換中の場合でも 一気に抜けるためです。 これだと本来のIME変換中のESCの機能(変換中の文字を消すだけ) が失われますが、1回でも消してIMEをオフにする、状態になって 中途半端なので取り敢えず2回に。
KeyRemap4MacBookでは変換中
の状態を取る要素が(調べた限り)無いので、
どちらか好みの設定にする、ということで。
また、こういった設定を書いてある所で余り見かけませんが、
1
|
|
を使うとIMEがON(日本語入力)の時だけ有効になります。
これはGNU screenと併用している時に絶対必要で、 これを外してしまうとGNU screenでコピーモードに入ろうと ctrl-[を押してもすぐESCが押され終了することになり コピーモードが使えなくなります。
ESC1回設定なら特に問題が無いのですが、2回設定の場合は必須。
日本語に戻す際に
英語
日本語
英語
と言った周りくどいことをしてますが、
これはGoogle日本語入力等を使っていて、入力中に補完表示がある状態で
GNU screenのコピーモードに入ろうとプレフィクス+ctrl-[
を押してしまうと補完表示が残る様になってしまったのでその処置です。
IMEをオフにするには
KeyCode::VK_CHANGE_INPUTSOURCE_ENGLISH
の代わりに
KeyCode::JIS_EISUU
(USキーボード使用時にも使えます)でもOKです。
(VK_CHANGE_INPUTSOURCE_*と言うバーチャルキーを使ってみたかっただけ。)
追記: 2013/10/23
OS X Mavericksにした所上のVK_CHANGE_INPUTSOURCE_ENGLISH
が効かなくなりました。
取り敢えずの所JIS_EISUU
で代用。
追記ここまで
追記: 2013/10/24
作者の人に聞いたら動いてる、とのことだったので再び試してみたら動きました。。。 何やら不安定だったのか、単に自分の早とちりだったのか。。。 いずれにしろ、Mavericksでも上のままでも大丈夫です。 (もしアップデート直後に駄目でもOSが安定したら?大丈夫になるはず。。。)
追記ここまで
macOS SierraでIMEをノーマルモードで必ずオフにする
追記: 2017/03/12
macOS SierraではKarabiner (旧KeyRemap4MacBook)は現状使えません。
ということで色々試したりしていましたが、 最終的にGoogle日本語入力+iTerm2だと Google日本語入力にキー設定を1つ加えるだけでこれが実現できました。
追記ここまで
追記: 2017/08/31
Karabinerの後継のKarabiner-ElementsとGNU screenの設定を追加することで上手くやる方法を見つけました。
追記ここまで
Windowsでyamyを使ってIMEをノーマルモードで必ずオフにする
Windowsではyamy を使って同じ様な事をしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
cygwin上のみで有効になる様な設定です。
yamyではIMEが有効である(IL
)の状態に加え、入力中(IC
)と言う状態を使えるので、
上の設定では
- IMEオンの状態で文字を入力中にESCを押したら入力キャンセル(元々のESCの動き)
- IMEオンの状態で文字を入力中でないときにESCを押したらIMEをオフにしてESC(ノーマルモードへ)
- ctrl-[を押したら入力中でもどんな状態でも最初にESCで行動をキャンセルし、IMEをオフにしてESC(ノーマルモードへ)
となっています。
ついでに最初のAlt-vの設定は、
このキーで右クリックをすることにより
貼り付け
を出来る様にしてあります。
cygwin
をputty
に替えて、PuTTYの設定で右クリックが貼り付けになっていれば
PuTTYでも同じ事が出来ます。
(ただし、マウスカーソルはターミナル上に無いとカーソル下のウィンドウを選ぶ
だけなので注意。)
Macだと元々Command-vが貼り付けでControlと区別されているので ターミナルなどでも貼り付けが使えますが、Windowsだと貼り付けキーが 使えないのでこれで代用を。
追記: 2013/06/28
下記ではGvimやPuTTYでも同じ様な設定を使うため、
Terminal
という新しいグループを作って
Cygwin
、Gvim
、PuTTY
上で有効にするようにしています。
CUIのvim.exe
を直接呼び出したWindowは
ConsoleWindowClass
と言うクラスだと言う事がyamyの調査から確認できるのですが
そもそもIMEの変換が良く分からない動きをしたりして、
イマイチちゃんと設定できなかったのでコメントアウトしてあります。
(わざわざCUI版Vimを直接呼び出す必要も無いと思いますし。)
後、上のコードコメントがちょっとおかしいのと
$ToggleIME
の前Esc
が要らない($ToggleIME
で入力を中断してIME Offの動きをするので)点も下では治してあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
追記ここまで
GVimで出来る設定
GVimではCUI版と違い、IMEを制御出来る部分があり、 Vim側だけで詳細に制御出来ます。
1 2 3 4 5 6 7 8 9 |
|
といった感じで.vimrc
で設定すればインサートモードやサーチモードに入った時はIMEをONにして
ノーマルモードに戻るときにオフにします。
GVimの方は殆ど使わないので実際使ってみないと分からない事もあるんですが、 日本語関連のことだと普通のGVimやらMacVimだと上手く設定が効かなくて、 KaoriYa version (Windows、 Macだと 効く、と言った話も見ました。
Ref: iminsert
日本語固定モード
im_control.vim というプラグインを使ってIMEのオン/オフをより詳細に設定する方法が vim UTF-8 日本語版 の中サイトの以下のページにに詳しくあります。基本的にはGVim専用。
Windows専用ですが、こんなプラグインも。
Tera Termでの制御シーケンスの使用
普段Tera Termは使わないのですが IMEの制御以外にもシーケンスを使った色々な設定が以下のサイトに詳しくあります。
Ref: vim からの制御シーケンスの使用例
Ref: dodaの日記: IME 制御
Tera Termを使ってない場合でもシーケンスを使った設定や使い方が参考になると思います。
WindowsでAutoHotkeyを使う方法
Autohotkeyはちゃんと使ったことないですが
yamyで
CtrlAltの交換でちょこちょこ不具合がるので
ちょっと他のリマップソフトも検討中のため、メモ。
下記のサイトにはimdisable
を
挿入モード
ノーマルモード
変換の際に自動で変更する設定も載っています。
追記: 2013/08/04
AutoHotkeyを使い始めたので、AutoHotkeyでの方法を自分でも作ってみました:
追記ここまで
IMEの状態でカーソルの色を変更する
GVim限定ですが、CursorIM
というhightlighが定義されていて
通常の時のCursorIM
と違う色を設定することでIMEの状態でカーソルの色を変えられます。
1 2 3 4 |
|
IMEのON/OFFをsyntaxで制御する
vim-jpにこんな話もありました。
以上!