VSCodeの拡張機能NeoVimについて
2024-04-01 追記
version が 1.8.1 とかなり開発が進んでいるようです。
試してから多分追記します。
2024-5-16 追記
試しました。
使ってみてすぐは古いバージョンのときに試したときとあまり変わらなかったかなと思っていたんですが
ガチガチに設定を書き込んだら快適に動きました。
世の vscode-neovimmer は本当にこんなクソみたいな作業をして乗り換えたの...?
過去何がダメだったか
ctrl w 系のウィンドウコマンドを押したときにスタックする問題があった。
特定のプラグインを実行するとスタックする
treesitterなどの色に関するプラグインが入ったままだと色味がバグって見るに堪えなかった
init.luaで記述した別のluaファイルを読み込む処理が上手く動いていなかった
上3つは未だに問題になっていそうでしたが、完全に別ものとして vscode-neovim 用に設定を書くことで対応できました。(クッソ面倒でした)
lazy.nvimを使用して読み込むプラグインそれぞれに、vscodeで読み込むかどうかを cond に記述をすることで対応しようとしましたが、上手くいかず。
code:sample.lua
cond = function()
return vim.g.vscode == nil
end,
最終的には、vscode-neovim 用に完全に別の設定を書いて対応しました。
code:init.lua
if vim.g.vscode then
require ...
else
end
それだけで完全には動かないので、 vscode のコマンドを呼び出す処理を nvim の設定に書き込むことで、ある程度対応しました。
code:sample.lau
require("vscode-neovim").call("workbench.action.moveEditorToNextGroup")
あとはインサートモードなどの vscode-neovim が干渉できないところでのキーバインドを設定しました。
keybindings.jsonにもろもろ記述することで対応できました。
code: keybinding.json
...
{
"command": "vscode-neovim.compositeEscape1",
"key": "j",
"when": "neovim.mode == insert && editorTextFocus",
"args": "j"
},
{
"command": "vscode-neovim.compositeEscape1",
"key": "k",
"when": "neovim.mode == insert && editorTextFocus",
"args": "k"
},
...
quick scope や hop が効いて、その他マッピングもある程度再現できました。
https://scrapbox.io/files/66481525f6f59f001d2f7b91.png
https://scrapbox.io/files/66481517c3a327001c2b405f.png
従来の vim 拡張機能ではそこそこ重かったのですが、vscode-neovim は軽く感じますね。
乗り換えの手間はかかりましたが、従来の vim くらいには使えるようになって、かつプラグインも使えるので、結果としては満足です。
でも大量に新しく設定を書き込まないといけないのはやっぱり面倒すぎる......
※ cursor エディタでは vscode-neovimの拡張機能の最新バージョンが手に入らないので注意!!! これクソ -
----------------------------------------------------以下過去に書いた古いもの--------------------------------------------------
https://gyazo.com/fe4c69c185151429f092c4f4b6680419
Visual Studio Code の拡張機能で NeoVim が新しくあるということでちょっと使ってみました
結論から言うと、まだ(2021年8月時点では)実用性に欠けると言えると思います。
理由はただ一点
いままでの通常 Vim 拡張機能ではできていた インサートモードにおける Vim操作が NeoVim 拡張機能では使えない
これです
vimrc がそのまま読み込めて使えたり、NeoVimのほうで入れたプラグインをそのまま流用できたり利点はあるのですが、
インサートモードにおける操作は全てVSCode側が行っているみたいなんですよね
なのでキーマップでインサートモードから抜ける Esc を jj に変えるっていうことができない
致命的だと思います。
それに、NeoVim を直接参照して使うスタイルなので、NeoVim そのまま使えばいいんじゃないかって思うんです