Vimmerを強化するためのIntelliJ IDEAプラグインを紹介します。

Table of Contents

IdeaVim

Vimの操作をエミュレーションするプラグインです。

JetBrains製のIDEならほとんど対応しています。

ここからの内容を過信しないでください
本情報は2020/05/03時点のものです。
最新の情報は公式ドキュメントで確認してください。

インストール

Setupに従って他プラグイン同様にインストールします。

設定

~/.ideavimrcを作成します。
source ~/.vimrc~/.vimrcを読み込むこともできます。

~/.ideavimrc
" [ 🖥️ Display ]
"-------------------
" 無駄な描画をしない
set lazyredraw
" 再描画の速度が速くなるらしいけど最近の端末では無意味との噂も..
set ttyfast
" 検索語をハイライト
set hlsearch
" コマンドのタイムラグをなくす
set ttimeoutlen=1
" スクロールした時 常に下に表示するバッファ行の数
set scrolloff=5


" [ 🔊 Sound ]
"---------------
" ベル音を鳴らさない
set visualbell


" [ 🔍 Search ]
"----------------
" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch
" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索時に大文字を含んでいたら大/小を区別
set smartcase
" (設定するとincsearchが無効になるためコメントアウト) 検索時に最後まで行っても最初に戻らない
" set nowrapscan

" [ 📁 File system ]
"---------------------
" swapfileなし
set noswapfile
" クリップボードの共有化
set clipboard=unnamedplus

" [ ⌨️ Key ]
"-------------
" メソッド移動
nnoremap [m :<C-u>action MethodUp<CR>
nnoremap ]m :<C-u>action MethodDown<CR>

Vimプラグインのエミュレート対応

IdeaVimは著名なプラグインのエミュレートに対応しています。

いくつか紹介します。

easymotion

数回のキー入力で画面の好きなところに瞬間移動できるプラグインです。
個人的に、コレなしでVimを使うことは考えられません😆

easymotionだけはIdeaVim以外のプラグインが必要です。

インストールすると、依存しているAceJumpプラグインもインストールされます。
~/.ideavimrcの設定は以下のようにしています。

~/.ideavimrc
set easymotion
" sで開始
nmap s <Plug>(easymotion-s2)
分割されたウィンドウも移動対象に含められないのか?

2020-05-03現在では未対応のようです。

Over Window Motion Note
(easymotion-overwin-f) UNSUPPORTED
(easymotion-overwin-f2) UNSUPPORTED
(easymotion-overwin-line) UNSUPPORTED
(easymotion-overwin-w) UNSUPPORTED

surround

特定の文字で囲まれた範囲を編集するプラグインです。
カッコやクォーテーション、タグの追加/削除/変更ができます。

~/.ideavimrc
set surround

multiple-cursors

IDEAにもあるマルチカーソルを実現するプラグインです。
Insertモード以外の操作にも対応しているので心強いです。

~/.ideavimrc
set multiple-cursors
" Ctrl+kで発動
map <C-k> <A-n>

commentary

コメント化/コメント解除するプラグインです。
text-objectやmotionと一緒に使えるのが強みです。

~/.ideavimrc
set commentary

ReplaceWithRegister

対象範囲をyank(クリップボード)に保存されたデータで置き換えます。

このとき、対象範囲のデータとyankの内容が置き換わることはありません。
複数の対象をyankのデータで置き換えたいときに便利です。

~/.ideavimrc
set ReplaceWithRegister
" _で発動. ダブルクォーテーションの中を置換したいなら _i"
map _ gr

argtextobj

引数を対象とするtext-objectです。
型も一緒に含まれるため、型定義がある場合に便利です。

デモには他プラグインの機能も混ざっています。
aaiaでtext-objectを指定している箇所が、本プラグインの機能です。

~/.ideavimrc
set argtextobj

textobj-entire

ファイル全体を対象とするtext-objectです。

~/.ideavimrc
set textobj-entire

総括

IntelliJ IDEAや他のJetBrains製 IDEで、Vimmer向けのプラグインを紹介しました。

作業効率という意味でVimの哲学は素晴らしいと思っています。
しかし、進化したツールがある現代に素のVimだけで開発するのは非効率です。

JetBrains製 IDEは開発効率や品質を圧倒的に向上させてくれます。
そこにVimの哲学をあわせることが今の時代にあった最適化ではないでしょうか。

P.S.

最近公開したMarkdownプラグインもよろしくお願いします😉

過去に書いたIDEA関連の記事もよろしければ🙏