きっかけ
エディタは Vim → Atom → Emacs → VSCode と渡ってきたけど、いつだって Vim キーバインドです。
もちろん VSCode でも VSCodeVim を使ってきました。 こいつはVimの動きを頑張ってエミュレートしていて努力の結晶という感じなのですが、概ね良い感じで動いていて、VSCode に移行した日から今までずっとこれを使ってきました。
VSCode Neovim という存在は以前から知っていました。初めてみたときに Neovim と通信して VSCode 上で Vim そのものの動作を実現するというのを読んでそこまでしてやりたいことか?と思ったのを覚えています。なぜか Neovim に対していい感情を持っていなかったというのもあったと思います。「ナードは黙って Vim 」とか思ってました。(なお当方 VSCode 使い)
しかし、同僚が使っている Neovim を見てからは、ネガティブな印象が払拭されていて、さらに VSCode Neovim の 紹介記事 をたまたま読んだことで、いっちょ試してみるかと移行してみました。
移行作業
馴染まない可能性をかんがえて VSCodeVim はアンインストールせずに無効化して進めました。
導入は Getting Started を見るとよくてシュッと完了します。Neovim も Homebrew でシュッと。起動すると 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
が欲しくて欲しくて...)
おすすめのやつがあったら教えてください。
- rhysd/clever-f.vim
f
などで検索したときにそのままf
を押し続けて移動できる
- unblevable/quick-scope
- 同じ行のユニークな文字列をハイライトしてくれるので飛びやすくなる
- wellle/targets.vim
- textobject の拡張
- monaqa/dial.nvim
Ctrl-a
/Ctrl-x
で変換できる対象を増やす (true/falseとか)
- rapan931/lasterisk.nvim
*
で検索したときにその場に留まったりできる
- kevinhwang91/nvim-hlslens
- 検索結果を分かりやすくする
- gbprod/substitute.nvim
- registerを汚さずにyankした内容と置き換える
- haya14busa/vim-edgemotion
- 縦移動時に同じインデントの行まで一気に飛べる
- haya14busa/vim-metarepeat
- lasterisk との組み合わせで選択したもの一気に書き換える
- keaising/im-select.nvim
- Normal モードに戻ったときに IME をオフにするため
- kylechui/nvim-surround
- vim-surround の lua 版
あとは 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 が好きなので使いつづけます。