ちなみに

火曜日の空は僕を押しつぶした。

VSCode Neovim に移行した

きっかけ

産まれてからずっと Vim キーバインドで生きてきました。

エディタは VimAtomEmacsVSCode と渡ってきたけど、いつだって Vim キーバインドです。

もちろん VSCode でも VSCodeVim を使ってきました。 こいつはVimの動きを頑張ってエミュレートしていて努力の結晶という感じなのですが、概ね良い感じで動いていて、VSCode に移行した日から今までずっとこれを使ってきました。

VSCode Neovim という存在は以前から知っていました。初めてみたときに Neovim と通信して VSCode 上で Vim そのものの動作を実現するというのを読んでそこまでしてやりたいことか?と思ったのを覚えています。なぜか Neovim に対していい感情を持っていなかったというのもあったと思います。「ナードは黙って Vim 」とか思ってました。(なお当方 VSCode 使い)

しかし、同僚が使っている Neovim を見てからは、ネガティブな印象が払拭されていて、さらに VSCode Neovim紹介記事 をたまたま読んだことで、いっちょ試してみるかと移行してみました。

移行作業

馴染まない可能性をかんがえて VSCodeVim はアンインストールせずに無効化して進めました。

導入は Getting Started を見るとよくてシュッと完了します。NeovimHomebrew でシュッと。起動すると Vim の操作が即座に有効になります。Insert モードは VSCode に完全に委ねられるので、ネイティブの Extension とカニバることもなし。

次は Neovim の設定です。過去の .vimrc はもう参考にならないだろうし、ゼロから設定することにしました。Lua で書けるらしいので、じゃあそれで。XDG Base Directory Specification に対応しているので、~/.config/nvim/ 以下に設定を書いていきます。

ディレクトリ構成はこういう感じになった。VSCode 用の設定を分けたけど、それ用の設定しか要らないので分ける必要はなかった気がする。設定はほとんどキーマッピングで凝ったことはしていません。そもそも多くの設定は VSCode 向けには意味がないし。

- nvim
    - lua
        - config
            - lazy.lua
            - vscode.lua
        - plugins
            - init.lua
    - init.lua

プラグインマネージャには Lazy.nvim を選択しました。なんにも分かってないのでひとまず有名っぽいものを。 いろいろプラグインの紹介記事を眺めながら、VSCode でも動きそうなものを選んでいきます。ふつうに動いていてすごい。

いったんこういう布陣になりました。VSCodeVim では出来ていなかったことを実現できてめっちゃ助かり。 (clever-f が欲しくて欲しくて...) おすすめのやつがあったら教えてください。

あとは VSCode 側に書いていたキー設定で vim.mode == insert とか書いていたのを neovim.mode に置き換えて完成。

まだこれで仕事のコードを書いた訳じゃないけど、今のところ快適に使えています。

よしあし

VSCode Neovim

  • pros
    • 速い (ひっかかりを感じなくて快適)
    • 各種プラグインが動く
  • cons
    • 別途 Neovim のインストールが必要 (依存が増えてリスクも増える)
    • 設定ファイルの資産がないとゼロから書かないといけない
    • マルチカーソル関係が弱い (特に VSCode 側の選択位置との連携ができないところ)
      • editor.action.addSelectionToNextFindMatch で目的の単語を全部選択してから c で置換とか出来なくなった

VSCodeVim

  • pros
    • 入れたら即使える
    • 困ることがほぼない (いっかい undo が爆発したけど)
  • cons
    • 動作がじゃっかんもっさりする
    • 設定ファイルを settings.json に書くので肥大しがち
    • エミュレートしているので若干本家と動きが違う
    • プラグインを足せない

それでもVSCodeにこだわる

そこまでするなら NeoVim に移行すればいいじゃんという話はある。話はあるけど僕は VSCode を使いつづけます。

あんまりいい言語化はできないのだけれど、コミュニティやエコシステムの規模が段違いなので安心感があるのと、手触りがめっちゃ気に入っているというところなのかもしれない。 キーボードでやることとマウスでやることのバランスがちょうどいいのかもしれない。キーボードは好きですが別に全部キーボードで操作できなくてもよい。GUIの方が見た目も触りやすいしね。

感情的なことをいうと VSCode が好きなので使いつづけます。