技術ブログ

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

2014年5月22日

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 の機能をマップすることはできない

.ideavimrc サンプル

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

.ideavimrc

"検索をファイルの先頭へ循環しない
set nowrapscan

"大文字小文字の区別なし
set ignorecase

"検索時に大文字を含んでいたら大/小を区別
set smartcase

"検索対象をハイライト
"ハイライトを消す場合は:noh[l]
set hlsearch

"スクロール時に表示を10行確保
set scrolloff=10

"JIS 配列 C-[ で Esc
inoremap <c-]> <esc>

"x キー削除でデフォルトレジスタに入れない
nnoremap x "_x
vnoremap x "_x

"vv で行末まで選択
vnoremap v ^$h

"選択範囲のインデントを連続して変更
vnoremap < <gv
vnoremap > >gv

"ノーマルモード中にEnterで改行
noremap <cr> i<cr><esc>

"インサートモードで bash 風キーマップ
inoremap <c-a> <c-o>^
inoremap <c-e> <c-o>$<right>
inoremap <c-b> <left>
inoremap <c-f> <right>
inoremap <c-n> <down>
inoremap <c-p> <up>
inoremap <c-h> <bs>
inoremap <c-d> <del>
inoremap <c-k> <c-o>D<right>
inoremap <c-u> <c-o>d^
inoremap <c-w> <c-o>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 の機能を割り当てられるようになったらと思うと夢が膨らみます。今後に期待しています。

-技術ブログ
-,

© 2020 karakaram-blog