Eclipseのキーバインドをvim風にできるVrapperが素晴らしすぎる件について
俺はエディターはvim派です。指が覚えてしまっているので。
普段はターミナルでvimを使っていて、Javaのコードを書くときだけEclipseな生活なんですが、Eclipseのエディターは、
なので、常々不満に思っておりました。
いままで、Eclipseのキーバインドをvim風にする、vipluginやEclimなどを試してみたのですが、vipluginはeclipseの補完がうまく働かない、Eclimはeclimdを起動させておく必要がありちょっと大げさ、など「これだっ!」というものがありませんでした。
そこで、「Vrapper」さんの登場ですよ!
Eclipseのエディターがvim風のキーバインドで使えます。しかも、Eclipseの補完機能なども同時に使えます!
Vrapperのインストール
Eclipseの更新サイトに"http://vrapper.sourceforge.net/update-site/stable"を設定してインスコりましょう。
Vrapperの使い方
インスコると、ツールバーにこんなアイコンがでてきます。
このボタンを押すことで、Vimモードになります。もっかい押すと通常にもどります。
(押した後、エディターを開き直さないと有効になりません。ここはちょっと残念)
Vrapperでできること
通常のvimコマンドは大体使えます。移動系はほぼOK。ビジュアルモードも、
テキストオブジェクトも大体使えます。ただvitやvi"などビジュアルモードの選択次にテキストオブジェクトを使うことはできないようです。(di"などで""内をカットしたりはできる)
:%s/foo/bar/のような置換はできません。
あと、当然ながらvipluginは無理です。vipluginを使いたい場合は、やはりEclimなどのほうがよいでしょう。
まぁ公式ドキュメント読んでください。
VrapperではキーマップにEclipseコマンドを登録できる
ここが素晴らしいとこですが、VrapperではキーマップにEclipseコマンドを登録できます。
Vrapperのキーマップなどの設定は、ユーザの$HOMEに.vrapperrcという設定ファイルを置いておくことで変更できます。
たとえば、対応する括弧への移動を[でできるようにするには、通常の.vimrcと同じように、nnoremap [ % と書いておくだけです。
で、この.vrapperrcに、eclipseaction <コマンド名>
たとえば、カーソル位置にあるクラスやメソッドを参照している箇所をプロジェクト内から検索するには、以下のように書きます。
"srで参照をプロジェクトから検索 eclipseaction SearchRef org.eclipse.jdt.ui.edit.text.java.search.references.in.project noremap sr :SearchRef<C-m>
これで、:SearchRefで、Eclipseで"参照をプロジェクトから検索"を実行したのと同じ結果になります。
さらにsrで呼び出せるようにキーマップを登録しています。
ElicpseコマンドIDは、このへんで探してください。
workbench, text editors, java editors
最後に、俺の.vrapperrcを貼っておきます。
:set ignorecase :set smartcase "スクロール noremap <Space>j <C-f> noremap <Space>k <C-b> "カーソル位置の単語をyankする nnoremap vv vawy "最後に変更されたテキストを選択する nnoremap gc `[v`] vnoremap gc ;<C-u>normal gc<Enter> onoremap gc ;<C-u>normal gc<Enter> " Insert mode中で単語単位/行単位の削除をアンドゥ可能にする inoremap <C-u> <C-g>u<C-u> inoremap <C-w> <C-g>u<C-w> " ;でExコマンド入力( ;と:を入れ替) noremap ; : noremap : ; "srで参照をプロジェクトから検索 eclipseaction SearchRef org.eclipse.jdt.ui.edit.text.java.search.references.in.project noremap sr :SearchRef<C-m> "<space>j, <space>kで画面送り noremap <Space>j <C-f> noremap <Space>k <C-b> "最後に編集された位置に移動 eclipseaction GoLastEditPosition org.eclipse.ui.edit.text.gotoLastEditPosition nnoremap gb :GoLastEditPosition<C-m> "対応する括弧に移動 nnoremap [ % nnoremap ] % "次のメンバ(フィールド,メソッド) eclipseaction GoNextMember org.eclipse.jdt.ui.edit.text.java.goto.next.member nnoremap mm :GoNextMember<C-m> eclipseaction GoPrevMember org.eclipse.jdt.ui.edit.text.java.goto.previous.member nnoremap mp :GoPrevMember<C-m>