karakaram-blog

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

 ツイート 0  シェア 0  Google+1 0  Hatena 3

vim-logo

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


2012年10月26日追記
Linuxの記事がやや古いです。Linuxについては下記の記事をご確認ください。
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. 動作確認

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

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

不便な点としては

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

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

Vimテクニックバイブルを読んで下記のサイトを知り、上記の問題を解決することができました。さらに、日本語入力固定モードという便利な環境も導入することができましたので紹介します。

参考サイト
Vim/GVimで「日本語入力固定モード」を使用する – fudist

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

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

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

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

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

動作確認環境

実際に動作確認を取った環境です。
GVimで動作確認しています。一部のターミナル版Vimでは動作しません。

  • 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にします。

上記の設定のうち、好きな挙動をする方をお選びください。

動作確認

下記の方法で動作確認を行ないます。

通常モードの動作確認

  • 挿入モードでIMをOnにしてからノーマルモードに移行する。IMがOffであることを確認。
    再び挿入モードに移行する。IMがOffであることを確認。
  • 挿入モードでIMをOffにしてからノーマルモードに移行する。IMがOffであることを確認。
    再び挿入モードに移行する。IMがOffであることを確認。

日本語入力固定モードの動作確認

  • 挿入モードでIMがOffの状態において、Ctrl+jキー。IMがOnであることを確認。
    ノーマルモードに移行する。IMがOffであることを確認。
    再び挿入モードに移行する。IMがOnであることを確認。
  • 挿入モードでIMがOnの状態において、Ctrl+jキー。IMがOffであることを確認。
    ノーマルモードに移行する。IMがOffであることを確認。
    再び挿入モードに移行する。IMがOffであることを確認。

おわりに

下記の課題が未解決となっています。
fuenorさんのご助力により解決しました。

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

すべてのOSで解決する方法を調査中です。
進展があったら記事にします。

fuenorさんのご助力により解決しました。
fuenorさん、ありがとうございました。

 ツイート 0  シェア 0  Google+1 0  Hatena 3

コメント

  1. 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

    以上お役に立てれば幸いです。何かありましたら直接ご連絡ください。