Wagomu no Akibako

Eclipse 上で Vim ライクな操作を可能にする Vrapper を使ったはなし


はじめに

この​記事はVim駅伝2023年04月21日の​記事です。

現在仕事で​ Java を​使用しています。​エディタは​プロジェクトに​参加時に​配布された​ Eclipseを​使っていたのですが、​テキスト編集は​ Vim の​キーバインドを​使えたら​便利だなと​思っていました。​そんな​ときに、​Vrapper と​いう​ソリューション​(Eclipse 上では​「ソリューション」と​よばれていますが、​以下​「プラグイン」と​呼びます)を​見つけました。

この​記事は​3ヵ月ほど​使ったうえでの​感想です。

Vrapper とは

Vrapper は、​Vim ライクな​操作を​ Eclipse 上で​可能に​する​プラグインです。
Vim ライクな​操作を​可能に​する​プラグインは​さまざまな​エディタで​提供されていますが、​そのうち Eclipse 上で​配布されている​ものが​ Vrapper です。

ドキュメントは​「https://vrapper.sourceforge.net/documentation/」です。

導入方​法

  1. 「ヘルプ(H) > 新規ソフトウェアの​インストール…」 を​選択し、​作業対象へ​ ​「http://vrapper.sourceforge.net/update-site/stable」 を​貼り付けます。
    作業対象へ、VrapperのURLを貼り付ける。
    ここで​気を​付けない​ことは、​一番上の​ Programming Language Plugins チェックボックスを​開くと、​Python, Java, C の​追加機能を​任意で​選択する​ことができます。​しかし、​それぞれ依存パッケージが​必要と​なるので​ご自身で​必要な​機能のみを​選択してください。

ドキュメントではここに​記載されています。

The CDT, JDT, and PyDev plugins access Eclipse features found only in the CDT package (C++ Development Tools) the JDT package (Java Development Tools), or PyDev package (Python Development). If you do any C++ development in Eclipse, chances are you already have CDT installed. Likewise with JDT for Java development. The Vrapper CDT plugin has a dependency on the CDT package, the Vrapper JDT plugin has a dependency on the JDT package, and the Vrapper PyDev plugin has a dependency on the PyDev package.

以下、​Deepl先生の​翻訳です。

CDT、​JDT、​PyDevプラグインは、​CDTパッケージ​(C++開発ツール)、​JDTパッケージ​(Java開発ツール)、​PyDevパッケージ​(Python開発ツール)に​のみ​含まれる​Eclipseの​機能に​アクセスします。​Eclipseで​C++の​開発を​行う​場合、​CDTが​すでに​インストールされている​可能性が​あります。​同様に、​Java開発用の​JDTも​あります。Vrapper CDTプラグインCDTパッケージに、Vrapper JDTプラグインJDTパッケージに、Vrapper PyDevプラグインPyDevパッケージに​依存します。​2. 必要な​機能を​選択し、​ 「次へ」 を​選択、​インストール完了後に​ Eclipse を​再起動すると​導入が​完了します。

設定

vrapper 用の​設定ファイルは​ドキュメントの​ ここに​書かれてあるように​ $HOME直下へ​ .vrapperrcまたは​ _vrapperrcを​配置します。

私は​ Eclipse の​機能も​楽しみたいので、​最低限​使えるような​以下の​設定を​しています。

set nonumber
set smartindent
set autoindent
set ignorecase
set smartcase
set clipboard=unnamed

nnoremap <Space>w : w<CR>

nnoremap H ^
nnoremap L $

onoremap 2 i"
onoremap 7 i'
onoremap 8 i(
onoremap [ i[
onoremap { i{
onoremap @ i`

onoremap a2 a"
onoremap a7 a'
onoremap a8 a(
onoremap a, a<
onoremap a@ a`

nnoremap v2 vi"
nnoremap v7 vi'
nnoremap v8 vi(
nnoremap v[ vi[
nnoremap v{ vi{
nnoremap v@ vi`

nnoremap va2 va"
nnoremap va7 va'
nnoremap va8 va(
nnoremap va, va<
nnoremap va@ va`

よかった​ところ

私自身は、​Vim や​ Neovim でも​凝った​設定を​していなかった​ため、​ Vrapper を​使う上で​後述する​キーバインドの​競合を​以外は​特に​問題は​ありませんでした。​Eclipse の​ショートカットである​ Ctrl + Shift + rで​ファイルを​開いたり、Ctrl + oで​メソッドを​移動して​ Vrapper で​テキスト編集を​する​等、​完全に​ Vrapper の​機能に​たよるのではなく​ Eclipse の​機能も​併用して​コーディングを​行っています。

また、​Vim の​大きな​特徴である​text-object に​対する​操作が​拡張される​ Surround Pluginが​使えるのも​個人的に​大きな​利点でした。
勝手に​この​手の​ Vim ライクな​操作を​提供する​プラグインは​素の​ Vim 以上の​ことは​できない​ものかと​思っていましたが、​ドキュメントを​見るに​ Vrapper ではいく​つかの​プラグインの​移植が​されていました。
ゆる​ふわ ​Vimmer だけではなく​ガチガチな​ Vimmer でもある​程度​使えるのではないかと​いう​印象です。​(私は​ゆる​ふわ ​Vimmer なので​十分でした)

困った​ところ

IDE を​使っている以上​仕方​ないのですが、​ Vim の​キーバインドが​ IDE の​ショートカットキーと​競合してしまう​問題が​起きてしまいます。
Eclipse の​設定で​競合した​ショートカットキーを​別の​キーへ​設定してあげる​ことで​この​問題は​回避できるのですが、​面倒だったので​やりませんでした。
その​ため自業自得ですが、​コーディングを​していると​そこそこな​頻度で​使いたくなる​ <C-a>が​全選択の​ショートカットキーと​競合して​困ってます。​(現在進行形)

また、​ <C-h>で​文字の​削除(BS)が​できないのも​結構​痛いです。​1日に​10回くらい​間違えて​置換の​ウィンドウを​表示させているので​そろそろ​対応しないと​いけないとは​思っています。

おわりに

最低限の​ Vim キーバインドが​使えたら​十分です!と​いう​人には​おすすめできる​プラグインです。

変更履歴

  • 2023/04/21: タイトルや本文から​「Eclipse」に​ついての​記事である​ことが​分かりにくかった​ため、​タイトル・​表現を​修正しました。​ご指摘くださいました、​vim-jpの​方々に​この​場を​お借りしてお礼申し上げます。