はじめに
この記事はエムスリーキャリア FY22 AdventCalendar4日目の記事です。
エンジニアとして働きはじめてからほぼVimmerとして過ごしてきた自分が初めてIDEとちゃんと向き合った時の事を書きました。
VimmerがJetBrains系のIDEを使いたい時の参考になれば幸いです。
自分のエディタ変遷
- 2019年にエンジニアになる。最初の研修(Java)で言われるがままにEclipseをインストール。
- 最初の現場で隣に座っていたスーパーエンジニアにVimを布教される。その人が時折高速で入力する
:w
に憧れてその日からVimAdventures※1でVimの練習を始める。 - そこから一年後。Neovimの存在を知る。Vimがリファクタされた版らしいという理由だけで乗り換える。
- さらに2年後。『Neovimめっちゃ好きだけど、IDEと一回ちゃんと向き合わなきゃなあ』と謎の使命感にかられる。そして転職。
- 現在。RubyMineをストレスなく使える様にしてみた。
なぜRubyMine(JetBrains)にしたの?
自身の尊敬している人たちがみんなJetBrainserだったからです。
- クリーン〇〇シリーズで有名なアンクルボブことロバート・C・マーティン※2
- 以前の職場の上司(相当なJetBrainsオタク)
- 現在の職場の上司
設定・プラグイン
Vimのキーバインドじゃないとコーディングのスピードが50分の1くらいまで下がるので、エミュレータのプラグインは必須でした。
その上、インサートモードではEmacsのキーバインドを使用したいのでそこが設定出来る事を目指します。
1. IdeaVim
何はなくともこれが必要です。
JetBrains内でVimをエミュレートするプラグインです。
2. .ideavimrcの設定
ここがメインです。
IdeaVimはVimにおける.vimrcと同様に.ideavimrcというファイルが使用できます。
これをホームディレクトリに配置すると、RubyMineを立ち上げた時に自動で読み込んでくれます。
ちなみにRubyMineからも編集することができます。
ステータスバー内のIdeaVimのアイコンをクリックすることでホームディレクトリに配置された.ideavimrcにアクセスできます。
RubyMine上で:source ~/.ideavimrc
を入力すればRubyMineを再起動しなくても更新が可能です。
👇👇👇自分が設定した内容です。
" plugin
set textobj-entire
set ReplaceWithRegister "grオペレーターで置換
set surround
set easymotion
set commentary "gcオペレーターでコメント追加
set multiple-cursors
set highlightedyank
" easymotion
nmap s <Plug>(easymotion-s2)
" multiple-cursors
map <C-N> <A-N>
map <C-P> <A-P>
map <C-X> <A-X>
map g<C-N> g<A-N>
" insert mode
inoremap <c-a> <c-o>^
inoremap <c-e> <c-o>$
inoremap <c-b> <left>
inoremap <c-f> <right>
inoremap <c-n> <down>
inoremap <c-p> <up>
inoremap <c-h> <bs>
inoremap <c-d> <del>
inoremap <c-k> <c-o>d$<right>
inoremap <c-y> <c-o>p
inoremap <c-u> <c-o>d^
inoremap <c-w> <c-o>db
" 現在のモードをステータスバーに表示
set showmode
" 検索で大文字小文字を区別しない
set ignorecase
set smartcase
" インクリメンタル検索
set incsearch
" 最後まで検索したら最初に戻る
set wrapscan
" 検索結果をハイライト
set hlsearch
" yankをクリップボードにコピーする
set clipboard+=unnamedplus
注意点としてはプラグインとコマンドはIdeaVimがサポートしているものしか使用することができません。
IdeaVimがサポートしているコマンドは下記に記載されています。
https://github.com/JetBrains/ideavim/blob/master/doc/set-commands.md
使ってみてどうだった?
さすがにNeovimのように軽快ではないのですが、検索やコードジャンプがめちゃめちゃ便利でした。
NeovimやVimでもできなくはないのですが、導入や設定が手間だったりするので、
それだけでもライセンスを買った価値があったなあと思います。
一つだけ不満があるとすれば、使えるカラースキームがあまり多くないなと感じました。
NeovimではTreeSitterを使えばかなり細かくシンタックスハイライトを当てることができるので、それが少し恋しくなりました。
まだまだRubyMineの機能を全部使いこなせているわけではないので、効率よく開発できるようにいろいろな機能を試していきたいと思います!💪
参考・出典・補足
※1 VimAdventures
Vimの操作をゲームで学べる神サイト。途中から課金が必要。
※2 アンクルボブは彼の著書『CleanCoder』内で「私はIntelliJユーザーである。愛しているのだ。」と語っています。
ちなみに彼は以前「viの神」と呼ばれていたそうです。