basyura's blog

あしたになったらほんきだす。

Eclipseのキーバインドをvim風にできるVrapperが "マジで" 素晴らしすぎる件について

そこで、「Vrapper」さんの登場ですよ!
Eclipseのエディターがvim風のキーバインドで使えます。しかも、Eclipseの補完機能なども同時に使えます!

Eclipseのキーバインドをvim風にできるVrapperが素晴らしすぎる件について

確かに Vrapper すごい。
viPlugin は「補完がうまく働かない」「補完機能が同時に使えない」ってのはよく分からないけど(自分は困ったことないから)。
最近は vimrc をいじることが多くなり、より使いやすいキーバインドを求めていくにつれて eclipse + viPlugin 時のキー誤爆率が上昇しっぱなしでげんなりしてた。
viPlugin で一番困るのが inoremap と nnoremap を別々に定義できないこと。viPlugin が用意しているもの以外は eclipse のキー設定だのみなので i だろうが n だろうが同じ動作になってしまう。
ところが、Vrapper は別々に定義できる。しかも、 ~/.vrapperrc に自分で定義できる。これすごい。
ただし、
eclipse のキー設定で既に定義されているものは Vrapper で発動しない(上書きされない)
点には注意。ドキュメントをあまり見ずに軽い気持ちで始めると確実にハマる。その場合はキー検索をして削るしか無い。
eclipse で用意されている、undo redo format といったコマンドも呼び出すことができる。

"Add JavaDoc
eclipseaction AddJavaDocComment org.eclipse.jdt.ui.edit.text.java.add.javadoc.comment
nnoremap mj :AddJavaDocComment<CR>

"definition ID of the source -> format action 
eclipseaction Format org.eclipse.jdt.ui.edit.text.java.format
vnoremap = :Format<CR>

workbenchtext editorsjava editors から設定を一通り抜き出したものを github に上げているので、これから始められる方は参考にどうぞ。定義が多すぎると動きが遅くなったりするのかは謎。
http://github.com/basyura/vrapperrc/blob/master/vrapperrc
今のところ僕の設定はこんな感じ

set ignorecase
set smartcase

nnoremap <C-a> 0
nnoremap <C-e> :LineEnd<CR>
nnoremap <C-f> <Right>
nnoremap <C-b> <Left>
nnoremap <C-u> 20<Up>
nnoremap <C-d> 20<Down>

nnoremap U :Redo<CR>
nnoremap mj :AddJavaDocComment<CR>
nnoremap mi :OrganizeImports<CR>

inoremap <C-o> <Esc>o
inoremap <C-h> <BS>
inoremap <C-a> <Esc>0i
inoremap <C-e> <Esc>:LineEnd<CR>a
inoremap <C-f> <Esc><Right>a
inoremap <C-b> <Esc>i
inoremap <C-d> <Esc><Right>xi

inoremap <C-w> <ESC>:DeletePreviousWord<CR>i
inoremap <C-k> <Esc><Right>:DeleteLineToEnd<CR>a
inoremap <C-u> <Esc>:DeleteLineToBeginning<CR>i

inoremap <C-u> <C-g>u<C-u>
noremap <C-u> <C-g>u<C-u>
noremap <C-w> <C-g>u<C-w>

vnoremap = :Format<CR>

なかなか思い通りに行かないところもあるので、試行錯誤中。AddJavaDocComment と OrganizeImports は地味だけど結構便利ではないかと。
最後に気になるところ(分からないところ)。

  • esc 時に ime を off にしたい。viPlugin の時はソースをゴニョゴニョして使ってたので同じようにすればいけるとは思う。
  • クイックアウトラインが表示されたと思ったら直ぐ消える。eclipse のキー設定を使えばいいのだけど、mo で表示したいところ。
  • 検索時のハイライトできないんだっけ?
  • <S-u> といった Shift を使った定義ができないので U とする。
  • eclipse のコマンドを呼び出すためには、一度 esc でノーマルモードに移るとか
  • .vrapperrc の定義がおかしい時に教えてくれない
  • source .vrapperrc したい