IdeaVIMがmapコマンドによるモード別キーマップに対応した

IntelliJ IDEA
IdeaVIM は、JetBRAINS 社 IDE 製品のキーマップを Vim っぽくするプラグインです。Vim 好きの皆さんはご存知ですよね。
最近になって久しぶりに IdeaVIM が更新されたので CHANGELOG を眺めていたら、何と :map コマンドによるモード別キーマップがサポートされていました。
ideavim-changelog
早速 .ideavimrc に Vim のお気に入りキーマップをいくつか移植してみたところ、結構いい感じに動いています。この機能がずっと欲しかったので個人的には神アップデートです。
IdeaVIM はインストールはしていたものの、本家 Vim との動作の違いに馴染めず、タイプミスが多くなってしまうので使わずにいましたが、:map コマンドのサポートでかなり Vim に近い操作感でコーディングできるようになりました。

動作確認環境

  • Mac OSX Mountain Lion
  • PhpStorm7.0.3
  • IdeaVIM0.35


目次

  1. .ideavimrc サンプル
  2. IDE キーマップとの競合を解決
  3. VIM キーマップは削除
  4. IDE の機能をマップすることはできない
  5. 参考サイト

.ideavimrc サンプル

ホームディレクトリ直下の .ideavimrc に設定を記述します。私の .ideavimrc はこんな感じ。
利用可能なオプションは ideavim/doc/set-commands.md を参考に。
変更は IDE を再起動しなくても :source ~/.ideavimrc コマンドで再読み込みできます。


"検索をファイルの先頭へ循環しない
set nowrapscan
"大文字小文字の区別なし
set ignorecase
"検索時に大文字を含んでいたら大/小を区別
set smartcase
"検索対象をハイライト
"ハイライトを消す場合は:noh[l]
set hlsearch
"スクロール時に表示を10行確保
set scrolloff=10
"JIS 配列 C-[ で Esc
inoremap  
"x キー削除でデフォルトレジスタに入れない
nnoremap x "_x
vnoremap x "_x
"vv で行末まで選択
vnoremap v ^$h
"選択範囲のインデントを連続して変更
vnoremap <  >gv
"ノーマルモード中にEnterで改行
noremap  i
"インサートモードで bash 風キーマップ
inoremap  ^
inoremap  $
inoremap  
inoremap  
inoremap  
inoremap  
inoremap  
inoremap  
inoremap  D
inoremap  d^
inoremap  db

IDE キーマップとの競合を解決

Vim キーマップと IDE のキーマップ競合は、「Vim Emulation」という設定項目で管理するようになりました。
IDE Settings > Vim Emulation
ideavim-vim-emulation
.ideavimrc のキーマップと IDE のキーマップが競合すると「Undefined」で登録されるので、どちらを優先するか割り当てます。「Undefined」の状態でキー入力すると、以下のようなアラートが上がるのですぐ気づきますね。
ideavim-conflict

VIM キーマップは削除

これまで IdeaVIM を使っていた方は 「Vim」というキーマップが IdeaVIM のインストール時に自動生成されているはずです。こちらのキーマップは不要になったので、削除して1からキーマップを設定しなおすことをおすすめします。

IDE の機能をマップすることはできない

残念ながら IDE としての機能をマップすることはできません。:map や :command に IDE の機能を割り当てられるようになったらと思うと夢が膨らみます。今後に期待しています。

参考サイト