jump to navigation

VimのノーマルモードでIMEを常時無効化する

2009-07-23 22:15 Posted by
nase
in : ソフトウェア
bluestar.jpg

Kaoriya版Vimではインサートモードから抜けるタイミングでIMEが自動的にOFFになってくれるので、ノーマルモードではスムーズにカーソル移動などの操作ができます。

しかし、うっかりノーマルモードで「半角/全角」キーを押してしまうと、この限りではありません。

カーソル移動するつもりが全角で入力文字が表示され、イラッとさせられることがたまにけっこうあります。

今回、AutoHotkeyと僅かな設定でこのイライラを解消することができたので紹介します。

gVim IME常時無効化設定

要はノーマルモードで「半角/全角」キーを押せないようにしてしまえばよいのですが、vimrcで直接「半角/全角」キーをリマップする方法は見つけられませんでした。

そこで、インサートモードにおいて「<C-^>」でIMEのON/OFFが切り替えられるというマイナー機能を利用することにします。

まず、ノーマルモードの<C-^>の機能(直前に開いていたファイルを開く?)を無効化します。

"ノーマルモードの<C-^>を無効化
nnoremap <silent> <C-^> <Nop>

日本語入力切り替えに<C-^>を日常的に使用するのは面倒なので、Vimウィンドウ限定で「全角/半角」キーを<C-^>にリマップします。

以下はAutoHotkeyで実現する例です。

;+----------------------------------------------------------------------------------------+
;  Vimのウィンドウ限定
;+----------------------------------------------------------------------------------------+
#IfWinActive ahk_class Vim

;「全角/半角」で「Ctrl+^」
vkF3sc029::Send, ^{^}
vkF4sc029::Send, ^{^}

以上でノーマルモードでは「半角/全角」キーをうっかり押しても反応しないようにすることができました。

おまけ

VimではIMEのON/OFF状態に応じたカーソル色を指定することができます。

こちらも併せて設定しておくとインサートモードでのモード識別に役立つかもしれません。(以下はzenburnでの配色例)

"IME状態に応じたカーソル色を設定
if has('multi_byte_ime')
  highlight Cursor guifg=#000d18 guibg=#8faf9f gui=bold
  highlight CursorIM guifg=NONE guibg=#ecbcbc
endif

追記@2009/07/24

はてなブックマークのコメントで「imdisable」というオプションを教えてもらいました。(ありがとうございます!)

んー。キーによっては起動しちゃうのでimdisableを使うのが良いんじゃないかな。

こんな感じでしょうか。こちらの方がシンプルでよさげです。

augroup InsModeAu
    autocmd!
    autocmd InsertEnter,CmdwinEnter * set noimdisable
    autocmd InsertLeave,CmdwinLeave * set imdisable
augroup END

ただ、私の環境ではなぜかコマンドラインモードでIMEが有効化できません。設定の方法が悪いのか・・・求む完全版!

追記@2009/07/28

最初の方法だとやはりタイミングなどによって希にノーマルモードでIMEが有効になってしまいますね。非常用に以下の設定をAutoHotkey側に追加しておいた方がよさそうです。(いざというときCtrl+^でIME切り替え)

^^::Send, {vkF3sc029}

ちょっとありがたみが無くなって来ました。

Comments»

no comments yet


*Comments and trackbacks will appear after it is approved by the administrator.