この記事は、im_control.vimプラグインのGVimで日本語入力固定モードを使用して、日本語入力を快適に行うための方法が書かれています。
2012年10月26日追記
Linuxの記事がやや古いです。Linuxについては下記の記事をご確認ください。
-
Ubuntu12.04のVimでIMの切り替えを改善する
この記事では、Ubuntu12.04のVimで日本語入力固定モードを利用し、IMの切り替えを改善する方法を紹介します。 ...
続きを見る
この記事を読んで、できるようになること
- 挿入モードからノーマルモードに移行した時に、自動的に日本語入力をOffにする。
- Ctrl-j キーで日本語入力固定モードに移行する。
日本語入力固定モードの間は、ノーマルモードから挿入モードに移行したときに日本語入力が自動的にOnになる。 - Ctrl-j キーで日本語入力固定モードを解除する。
通常モードの間は、ノーマルモードから挿入モードに移行したときに日本語入力がOffのままとなる。 - Windows,Mac,Linuxで同じ操作・挙動を実現する。
GVimで動作確認しています。一部のターミナル版Vimでは動作しません。
目次
- Linux GVimの日本語入力で困っていたこと
- 日本語入力固定モードとは
- 動作確認環境
- 各OSで共通の設定
- Windows GVim KaoriYaの場合
- Mac MacVim KaoriYaの場合
- Linux GVimの場合
- UniteやVimShellを使用する場合
- 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さんのご助力により解決しました。
- 日本語入力固定モードにおいて、fキーを押した時に日本語入力をOffにしたい。
- 日本語入力固定モードにおいて、Uniteプラグインのsourceを開いた時に日本語入力をOffにしたい。
fuenor さんからのコメント
コメント機能を停止したため、作者の fuenor さんからコメントでいただいた内容を転記しておきます。
> 日本語入力固定モードにおいて、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
以上お役に立てれば幸いです。何かありましたら直接ご連絡ください。