( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

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

俺はエディターはvim派です。指が覚えてしまっているので。


普段はターミナルでvimを使っていて、Javaのコードを書くときだけEclipseな生活なんですが、Eclipseのエディターは、

f:id:yuroyoro:20100218161120j:image

なので、常々不満に思っておりました。


いままで、Eclipseキーバインドvim風にする、vipluginやEclimなどを試してみたのですが、vipluginはeclipseの補完がうまく働かない、Eclimはeclimdを起動させておく必要がありちょっと大げさ、など「これだっ!」というものがありませんでした。


そこで、「Vrapper」さんの登場ですよ!

Eclipseのエディターがvim風のキーバインドで使えます。しかも、Eclipseの補完機能なども同時に使えます!

Vrapperのインストール

Eclipseの更新サイトに"http://vrapper.sourceforge.net/update-site/stable"を設定してインスコりましょう。

Vrapperの使い方

インスコると、ツールバーにこんなアイコンがでてきます。


f:id:yuroyoro:20100218161316p:image


このボタンを押すことで、Vimモードになります。もっかい押すと通常にもどります。
(押した後、エディターを開き直さないと有効になりません。ここはちょっと残念)

Vrapperでできること

通常のvimコマンドは大体使えます。移動系はほぼOK。ビジュアルモードも、の矩形選択はできませんがまぁ使えます。


テキストオブジェクトも大体使えます。ただvitやvi"などビジュアルモードの選択次にテキストオブジェクトを使うことはできないようです。(di"などで""内をカットしたりはできる)

:%s/foo/bar/のような置換はできません。


あと、当然ながらvipluginは無理です。vipluginを使いたい場合は、やはりEclimなどのほうがよいでしょう。


まぁ公式ドキュメント読んでください。

VrapperではキーマップにEclipseコマンドを登録できる

ここが素晴らしいとこですが、VrapperではキーマップにEclipseコマンドを登録できます。


Vrapperのキーマップなどの設定は、ユーザの$HOMEに.vrapperrcという設定ファイルを置いておくことで変更できます。
たとえば、対応する括弧への移動を[でできるようにするには、通常の.vimrcと同じように、nnoremap [ % と書いておくだけです。


で、この.vrapperrcに、eclipseaction <コマンド名> と書いておくと、exコマンドでEclipseのコマンドを呼び出すことができます。


たとえば、カーソル位置にあるクラスやメソッドを参照している箇所をプロジェクト内から検索するには、以下のように書きます。

"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>