GVimで日本語入力固定モードを使用し、日本語を快適に入力する

2011年10月29日

Vim

この記事は、im_control.vimプラグインのGVimで日本語入力固定モードを使用して、日本語入力を快適に行うための方法が書かれています。

2012年10月26日追記
Linuxの記事がやや古いです。Linuxについては下記の記事をご確認ください。

Vim
Ubuntu12.04のVimでIMの切り替えを改善する

この記事では、Ubuntu12.04のVimで日本語入力固定モードを利用し、IMの切り替えを改善する方法を紹介します。 ...

続きを見る

この記事を読んで、できるようになること

  1. 挿入モードからノーマルモードに移行した時に、自動的に日本語入力をOffにする。
  2. Ctrl-j キーで日本語入力固定モードに移行する。
    日本語入力固定モードの間は、ノーマルモードから挿入モードに移行したときに日本語入力が自動的にOnになる。
  3. Ctrl-j キーで日本語入力固定モードを解除する。
    通常モードの間は、ノーマルモードから挿入モードに移行したときに日本語入力がOffのままとなる。
  4. Windows,Mac,Linuxで同じ操作・挙動を実現する。

GVimで動作確認しています。一部のターミナル版Vimでは動作しません。

目次

  1. Linux GVimの日本語入力で困っていたこと
  2. 日本語入力固定モードとは
  3. 動作確認環境
  4. 各OSで共通の設定
  5. Windows GVim KaoriYaの場合
  6. Mac MacVim KaoriYaの場合
  7. Linux GVimの場合
  8. UniteやVimShellを使用する場合
  9. fuenor さんからのコメント

Linux GVimの日本語入力で困っていたこと

WindowsやMacのGVimでは、日本語入力で特に困ることはありませんでしたが、CentOSやUbuntuのGVimでは日本語入力にかなりの不便さを感じていました。

不便な点としては

  • 日本語入力がOnの状態でノーマルモードに戻った時に、日本語入力が自動でOffにならない。
    日本語入力を手動でOffにしないとノーマルモードでまともに操作できない。
  • 常に日本語入力のOnOff状態を意識せねばならず、作業に集中できない。

WindowsやMacのGVimでは上記の現象が起きず、Linuxのみこのような状態でしたので、かなりストレスでした。

Vim/GVimで「日本語入力固定モード」を使用する - fudistの記事で上記の問題を解決することができました。さらに、日本語入力固定モードという便利な環境も導入することができましたので紹介します。

今ではWindows,Mac,Linuxで同じ操作・挙動を得ることができ、快適な日本語入力作業を行なっています。

日本語入力固定モードとは

日本語を入力したいときに便利な特殊モードです。Ctrl+jキーで日本語入力固定モードのOnOffを切り替えます。

日本語入力固定モードの間は、ノーマルモードから挿入モードに移行したときに日本語入力が自動的にOnになります。通常モードの間は、ノーマルモードから挿入モードに移行したときに日本語入力がOffのままとなります。

私はドキュメントやブログを書く時は日本語入力固定モードをOnにし、コードを書くときは日本語入力固定モードをOffにしています。

動作確認環境

  • Windows 7,XP | GVim KaoriYa
  • Mac OSX Snow Leopard | MacVim KaoriYa
  • Ubuntu 10.10 | GVim
  • CentOS 5.7 | GVim

各OSで共通の設定

im_control.vimの導入

下記URLより、im_control.vim をダウンロードします。

https://sites.google.com/site/fudist/Home/vim-nihongo-ban/vim-japanese/ime-control#downloads

ダウンロードした im_control.vim をランタイムパスが通った場所にコピーします。

私はpathogenを使用していますので、$HOME/.vim/bundles/im_control/plugin/im_control.vim に配置しました。

vimrcの設定

"コマンドラインの高さを2に
set cmdheight=2

Ctrl+jキー押下時に現在の日本語モードの状態が表示されるようになりますので、コマンドラインの高さを2以上にします。

Windows GVim KaoriYaの場合

_vimrcに下記のように記述します。

"<C-^>でIM制御が行える場合の設定
let IM_CtrlMode = 4
"ctrl+jで日本語入力固定モードをOnOff
inoremap <silent> <C-j> <C-^><C-r>=IMState('FixMode')<CR>

Mac MacVim KaoriYaの場合

.vimrcに下記のように記述します。

"<C-^>でIM制御が行える場合の設定
let IM_CtrlMode = 4
"ctrl+jで日本語入力固定モードをOnOff
inoremap <silent> <C-j> <C-^><C-r>=IMState('FixMode')<CR>

.gvimrc の set noimdisableactivate の設定はim_cotnrol.vimで設定されているため、設定不要です。設定されている方は削除してください。

Linux GVimの場合

本家サイトでは各種環境に応じた設定方法が紹介されています。詳細はそちらをご確認ください。

私は主にCentOSとUbuntuを使用しており、すべての環境においてInputMethodはSCIMを使用し、xvkbdでIMを操作する環境に統一しています。環境を統一することで、それぞれの環境におけるvimrcの記述を統一することができます。

以下よりxvkbdによる設定方法を紹介します。

xvkbdのインストール

apt-get,yum等でインストールします。

$ apt-get install xvkbd
$ yum install xvkbd

InputMethodショートカット変更

私のInputMethodショートカット設定は少し特殊で、変換、無変換キーを使ってMac風にIMを操作できるようにしています。

  • 「変換」キーでIMを有効
  • 「無変換」キーでIMを無効
  • 「Ctrl+space」キーでIMを切替

xvkbd動作確認

ターミナルで下記のコマンドを入力。IMが切り替わることを確認します。Henkan, Muhenkan等の文字はご自身のIM設定で書き換えてください。

$ xvkbd -text "\[Henkan]" > /dev/null 2>&1
$ xvkbd -text "\[Muhenkan]" > /dev/null 2>&1
$ xvkbd -text "\[Control]\[space]" > /dev/null 2>&1

.vimrcの設定

.vimrcに下記のように記述します。IMCtrl関数の内容は、ご自身のIM設定で書き換えてください。

"IM On/Offが個別制御できる場合
let IM_CtrlMode = 1
"ctrl+jで日本語入力固定モードをOnOff
inoremap <silent> <C-j> <C-r>=IMState('FixMode')<CR>
"\[Henkan] \[Muhenkan] \[Control]\[space] は環境により書き換える
function! IMCtrl(cmd)
	let cmd = a:cmd
	if cmd == 'On'
		let res = system('xvkbd -text "\[Henkan]" > /dev/null 2>&1')
	elseif cmd == 'Off'
		let res = system('xvkbd -text "\[Muhenkan]" > /dev/null 2>&1')
	elseif cmd == 'Toggle'
		let res = system('xvkbd -text "\[Control]\[space]" > /dev/null 2>&1')
	endif
	return ''
endfunction

UniteやVimShellを使用する場合

日本語入力固定モードをOnにした状態でUniteやVimShellを起動すると、IMがOnの状態で起動してしまいます。下記のいずれかの設定をvimrcに追加することでIMをOffにして起動することができます。

"バッファ毎に日本語入力固定モードの状態を制御。
let IM_CtrlBufLocalMode = 1

バッファ毎に日本語入力固定モードの状態を保持するようになります。

"filetypeがunite,vimshellの場合、日本語入力固定モードを個別制御
au FileType unite,vimshell let  b:IM_CtrlBufLocal = 1

UniteやVimShellを開いた時、日本語入力固定モードをOffにします。上記の設定のうち、好きな挙動をする方をお選びください。

おわりに

下記の課題が未解決となっています。

fuenorさんのご助力により解決しました。

  1. 日本語入力固定モードにおいて、fキーを押した時に日本語入力をOffにしたい。
  2. 日本語入力固定モードにおいて、Uniteプラグインのsourceを開いた時に日本語入力をOffにしたい。

fuenor さんからのコメント

コメント機能を停止したため、作者の fuenor さんからコメントでいただいた内容を転記しておきます。

im_contorl.vimの作者です、こんにちは。

 

> 日本語入力固定モードにおいて、fキーを押した時に日本語入力をオフにしたい。
Windowsでもim_contorl.vimを使うか、自前で以下のように処理します。
https://sites.google.com/site/fudist/Home/vim-nihongo-ban/vim-japanese/ime-control#TOC-IME-
iminsertが有効な環境なら同様に対処できるはずです。
そうでないならそもそも f コマンドではオンにならないので問題ないはずです。

> 日本語入力固定モードにおいて、Uniteプラグインのsourceを開いた時に日本語入力をオフにしたい。
最新版での制御について b:IMCtrlDisableを追加しました。
https://sites.google.com/site/fudist/Home/vim-nihongo-ban/vim-japanese/ime-control#downloads
以上お役に立てれば幸いです。何かありましたら直接ご連絡ください。

-技術ブログ
-