Open7

【Neovim+VSCode】vscode-neovimでもeasymotionを使いたい!

airRnotairRnot

EasyMotionって便利ですよね

vim/nvimには、vim-easymotionというpluginがあり、カーソル移動をより便利にすることができます。

vscode-neovimを使用している場合にも、これ使いたいですよね。しかし、導入に結構手間取ったので解決までの顛末を紹介します。

airRnotairRnot

1. easymotion/vim-easymotion

まずは、冒頭で示したeasymotion/vim-easymotionをそのまま使ってみます。

結論としては……上手く動きません!

どうやら、vscodeでは動かないみたいで、それ用にforkされたものがあるみたいです。

airRnotairRnot

2. asvetliakov/vim-easymotion

では、そのforkされた方を使ってみます。

結論としては……上手く動きません!

正確には、動いたり動かなかったり……
そして、動いたとしてもファイルをぶっ壊してくることがあるので、実用性はありませんでした。

airRnotairRnot

3. EasyMotion

nvimのpluginが上手く動かないなら、vscode側の拡張機能をnvimから動かせばいいのではということで、まず試してみたのはEasyMotionという拡張機能です。

vscode-easymotion.jumpToWordというcommandでeasymotionの状態に入れるみたいなので、

keymap("n", "<Leader><Leader>w", "<Cmd>call VSCodeNotify('vscode-easymotion.jumpToWord')<CR>", { noremap = true, silent = true })

とnvim側でkeymapを設定しました。

結果としては、easymotion自体は動作するが、その後の動作がおかしくなるといったものでした。
insert modeとnormal mode両方の性質を併せ持つ、みたいな状態でまともに編集することができなくなるので却下です。

airRnotairRnot

4. Jumpy

easymotionと似たようなことができるのが、このJumpyという拡張機能です。

結論からいうと、3のEasyMotionと同じ現象が発生したので却下です。

airRnotairRnot

5. Jumpy2

はい、Jumpy2です。
あのJumpyが進化して帰ってきた!

そしてなんと、readmeに

Works great with or without vim or neovim!

と書いてあります。おお、期待できますね!

結論からいうと……

……

ちゃんと動きました!!!!!!!

keymap("n", "<Leader><Leader>w", "<Cmd>call VSCodeNotify('jumpy2.toggle')<CR>", { noremap = true, silent = true })

これでちゃんと想定通りの動きをしました。たまに<Leader>を3回押さないと反応しないときがありますが、それはvscode-neovim側の問題な気がしますので妥協します。

ありがとう、Jumpy2!!