🧊

VimからNeovimに移行した

移行しようと思ってしたというより、なりゆきでそうなっただけではあるけど。

が、結論としてはもっと早く移行すりゃよかった!というくらいに、Neovimいいやん!ってなってる。

ことの経緯

`coc.nvim`やめるってよ

  • もともとエディタはノーマルVimをターミナル内で使ってた
    • みんなVSCodeな中、やや疎外感を感じながらも
  • LSPまわりは`coc.nvim`を使ってて、特に不満はなかった

が、ある日。

手元のNode.jsのバージョンを最新のLTSにあげたら、Svelteのエクステンションである`coc-svelte`が動かなくなった。

どうやら既知のIssueらしく、リポジトリにもPRが立ってた。

Fix coc-svelte not working with Node v18 by rudolfs · Pull Request #60 · coc-extensions/coc-svelte · GitHub

が、1ヶ月以上も音沙汰ないし、そもそも半年以上もリポジトリに動きがない。

手元でフォークしたものを使うのもありか・・?他のは動いてるし・・?って思いつつも、やっぱり嫌な予感がするということで、 `coc.nvim`ごとやめることにした。

Astroのエクステンションがなかったりと、地味に不満はあったし。

`asyncomplete`と、なぜか補完されないJSX

`coc.nvim`からの移行先としては、`vim-lsp`と`asyncomplete`の定番セットを選んだ。

Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'
Plug 'rhysd/vim-healthcheck'
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'

" ...

let g:lsp_use_native_client = 1
let g:lsp_document_code_action_signs_enabled = 0
let g:lsp_diagnostics_float_cursor = 1
let g:lsp_diagnostics_virtual_text_enabled = 0
let g:lsp_diagnostics_highlights_enabled = 0
let g:lsp_inlay_hints_enabled = 1
let g:lsp_semantic_enabled = 1

見た目を整えるのが少し大変ではあったけど、他は問題なく移行できた。

SvelteのLSも最新のものが使えるようになったし、Astroまで対応してるし、やっぱ薄いものを組み合わせて使うのが好みやな〜これこれ〜って。

ただ1つ、問題を見つけてしまった。

それは、React/Preact/Solidなんでもいいけど、「JSXで補完がうまく効かない」というもの。

このあたりの補完が出ない。

  • `lsp-hover`みたいなコマンドでは、型がちゃんと見れてる
    • ので、LSP側の問題ではなさそう?
  • ARIAまわりだけはなぜか補完されたり

というよくわからない状態で、たぶん`asyncomplete(-lsp)`の問題とは思うものの、他に悩んでる人がインターネットに見当たらず、自分の環境固有の問題かの判断もつかないまま、途方に暮れてた。

ただまぁ不便やな〜と思いつつ、幸い直近でガリガリJSXを書く予定がなかったので、そのままにしてた。

WeztermとVimのキーマップ問題

時を同じくして、年末やし新たなターミナルでも開拓するか!ってことで、Weztermを少し試してた。

  • Kittyは日本語のIMEまわりに問題あり
  • Alacrittyはシンプルすぎて、いまさら`tmux`導入したくないしな・・

というわけで、Weztermはどストライクだった。使ってる機能的にはiTerm2と差異はないけど、レンダリングまわりやUIがシュッとしてるのが好印象。

が、ここでもVimとのかみ合わせの問題があり・・・。

それは、`/`キーのマップが突然動かなくなるというもの。詳細は以下のGistに。

https://gist.github.com/leader22/8b34c569ebff0fe88b2108dd01efb0d4?permalink_comment_id=4408020#gistcomment-4408020

というところで、iTerm2に残留することにしてた。設定が`.plist`であること以外は特に不満はなかったし。

Neovimとの出会い

JSXとの相性が悪いまま1ヶ月が経とうとしてたある日、たまたま目にしたNeovimの文字を見て、ちょっと試してみることにした。 LSPまわりはネイティブと`mason`と`nvim-cmp`の定番セットで。

そしたら、すべてうまく動くじゃないですか・・・🤯

もともとNeovimはGUIで使うもんだとばかり思い込んでたけど、ターミナルからも普通に使えるし、SSHして作業することもなくなった今なら、ノーマルVimに拘る必要なんかないのでは?って。

ということで、あっさりNeovimユーザーになることにした。今までありがとう普通のVim

Hello, Neovim

という経緯から、この度Neovimmerになったので、改めて設定やプラグインの見直しをやってたのがこの年末。

https://github.com/leader22/dotfiles/blob/b7db1af7ab13b44b892ee85b070e374dd3025338/init.lua

これが今の設定のすべて。もともとファットに設定してたタイプではないので、200行くらいしかない。

(ならVSCodeでいいのでは?って言われそうやけど、それは違うんだな〜。プラグインをとっかえひっかえしたり、設定ファイルという盆栽をちまちま育てていく・・、これだからエディタいじりは楽しい!!っていう。)

しかもNeovimにしたら、Weztermとの相性問題もあっさり解決するという棚ぼた展開までついてきて、ほんとに移行してよかった。

以上、`coc-svelte`をなんとかしようとしてたら、気がついたらNeovimになってたという話でした。

2023年、もしVSCodeで`settings.json`をあれこれ書いてる人がいたら、ぜひこっちの沼に引き込みたい。

設定ファイルもコツコツ育てていこう🐣