【Neovim+VSCode】vscode-neovimでもeasymotionを使いたい!
EasyMotionって便利ですよね
vim/nvimには、vim-easymotionというpluginがあり、カーソル移動をより便利にすることができます。
vscode-neovimを使用している場合にも、これ使いたいですよね。しかし、導入に結構手間取ったので解決までの顛末を紹介します。
1. easymotion/vim-easymotion
まずは、冒頭で示したeasymotion/vim-easymotionをそのまま使ってみます。
結論としては……上手く動きません!
どうやら、vscodeでは動かないみたいで、それ用にforkされたものがあるみたいです。
2. asvetliakov/vim-easymotion
では、そのforkされた方を使ってみます。
結論としては……上手く動きません!
正確には、動いたり動かなかったり……
そして、動いたとしてもファイルをぶっ壊してくることがあるので、実用性はありませんでした。
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両方の性質を併せ持つ、みたいな状態でまともに編集することができなくなるので却下です。
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!!