neovim構築メモ

vim8 -> neovim 移行のメモ。もう途中までやっちゃってるけどメモを残しておかないと後でこのプラグインなんで入れたんだっけとかこれどうやってるっけがわからなくなりそう。
移行の経緯としては
- 元々vimが好きではあるもののvimだけで開発するほど使いこなせていなかったのでVSCodeで開発していた
- 当時の職場がPJによっては異動時にPC初期化が必要なことがあったり共通の開発サーバなどでなんだかんだ素のvimを触ることが多かったのであまりゴリゴリにカスタマイズはしないようにしてた
- 転職して後輩に教える時に後輩PCを一瞬借りて操作するみたいなこともなく(当時も基本モブプロスタイルで頑張っていたが)自分の環境だけ考えて良くなった
- 人手不足で開発業務以外にもやることがだいぶ増えてきて生産性を上げたい
- VSCodeのvimはかなり頑張ってvimっぽく動いてくれるが普段なら気にならない違いも会議まであと数分だけど大したことない関数だから作っちゃおって時に見つかるとちょっとフラストレーション溜まっちゃう
- VSCode + Neovimはもう編集部分はNeovimを呼び出す思想なので完全にvimだから試してみたい
って感じ。ただし職場で使っているGithub Copilotとvimは相性が悪いらしい(今開いているバッファの内容しか見てくれないらしい)ので仕事で使うかはわからないが、年末年始にゲームばかりするのもアレなので開発環境見直しをする。

とりあえずNeovimとはってレベルなので初めの一歩をサポートしてくれるkickstartを参考にLSPとかの設定を行った。ぶっちゃけこれをForkしてよしなに変更するだけでよかったかもしれない。

buffer内のwordもLSPの補完に入れて欲しいのでcmp-bufferを入れた。特にオプション指定もしてないのでREADME見ればOK

kickstartのプラグイン導入方法の説明に従いnvim-autopairsを入れた。だいたい誰でも入れるプラグインを敢えて入れずにプラグインを追加するならこうやってねの説明に使うとはイケメンやな

格好良い見た目にしたいのでlspsagaを入れたが、キーバインディングの設定方法に戸惑い(neovimとluaどちらも初心者なので。lspsagaが悪いわけじゃない)見た目の設定は今後なんか実装する時にこうしたいって出てきたらやる。
keysに設定すればよかっただけなのに手間取ってしまった。おいおいluaにも入門しなければ。
return {
'nvimdev/lspsaga.nvim',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'nvim-tree/nvim-web-devicons'
},
keys = {
{mode = "n", "<leader>lh", "<cmd>Lspsaga hover_doc<CR>", desc = "hover documentation"},
{mode = "n", "<leader>lf", "<cmd>Lspsaga finder<CR>", desc = "lspsaga finder"},
{mode = "n", "<leader>lr", "<cmd>Lspsaga rename<CR>", desc = "lspsaga rename"},
{mode = "n", "<leader>lto", "<cmd>Lspsaga open_floaterm<CR>", desc = "lspsaga open_floaterm"},
{mode = "n", "<leader>ltc", "<cmd>Lspsaga close_floaterm<CR>", desc = "lspsaga close_floaterm"},
{mode = "n", "<leader>lca", "<cmd>Lspsaga code_action<CR>", desc = "lspsaga code_action"},
{mode = "n", "<leader>lsd", "<cmd>Lspsaga show_line_diagnostics<CR>", desc = "lspsaga show_line_diagnostics"},
{mode = "n", "<leader>lpd", "<cmd>Lspsaga peek_definition<CR>", desc = "lspsaga peek_definition"},
{mode = "n", "<leader>l[", "<cmd>Lspsaga diagnostic_jump_prev<CR>", desc = "lspsaga diagnostic_jump_prev"},
{mode = "n", "<leaaer>l]", "<cmd>Lspsaga diagnostic_jump_next<CR>", desc = "lspsaga diagnostic_jump_next"},
},
config = function ()
require('lspsaga').setup({
symbol_in_winbar = {
enable = true,
},
ui = {
border = "single",
title = false,
},
lightbulb = {
enable = true,
},
code_action_lightbulb = {
enable = true,
},
show_outline = {
win_width = 50,
auto_preview = false,
},
})
on_attach = function(client, bufnr)
client.server_capabilities.documentFormattingProvider = false
end
end,
}

これでよかったかもしれん

lspでpyrightを使うためにはちょっとセットアップが必要だった。
NodeJSも入れないとダメっぽい:https://retval.jp/blog/m1-mac-nodenv/
とりあえず有効化する:https://namileriblog.com/mac/neovim_lsp/#i-13
poetry使いたい:https://zenn.dev/pluck/scraps/27b2a2bd75e6f3

terminalをトグルしたくて入れた。恐らくneovim内で使いたいターミナルは1つしかないだろうから複数のターミナルを呼び出したり切り替えたりするkeymapは用意していない。ターミナルがいくつか必要なら普通にWarp側で増やせば良いし。

もはやAIのサポート無しにコーディングするのはキツイのでcodeiumを入れた。いずれローカルのLLMに置き換えたい(私用PCでコーディングするのは割と家の外が多いので)
codeiumのsuggestionを受け入れるのがtab以外のキーにする方法がわからなかったのでtabで補完の次候補に移動するのをやめて<C-j>で移動するようにした (<C-Tab>でも良いかなと思ったがWarp側で別のタブに移動するために使える方が便利なのでC-jにした) <C-Tab> はterminalをトグルするために使うことにした。

Javaを使うために色々苦戦中。とりあえずnvim-javaを入れているので最低限書けるようにはなった。
LSPの設定がむずい。Eclipseは偉大やったんや、、、フォーマッターの設定をMavenに持たせるかvimに持たせちゃうかが悩みどころ。今の仕事では自分でフォーマッターの設定ができるがプロジェクトごとに分けれた方が良いと思う。けどわざわざMavenにフォーマッターの設定書いてあるプロジェクトがどれくらいあるものか(SI時代は当然あったが)
下記あたりを参考にある程度快適にコーディングできるようにしたい。年始に頭痛と吐き気で結構な期間動けなかったのが痛い...

わざわざジャンプしなくてもちょっと関数の中身を見たいって時用に

VSCode風のカラーにしたらindent-blanklineのインデントが常に強調されたので公式のサンプルに合わせて設定。https://github.com/lukas-reineke/indent-blankline.nvim?tab=readme-ov-file#rainbow-delimitersnvim-integration

terraform-lsを入れた。こちらを参考にした:https://zenn.dev/koralle/scraps/e3ab6e14fbbe55

mason経由でyamllsがどうしても入らなかったので :LspInstall yamlls
で入れた。う〜ん。
https://github.com/b0o/schemastore.nvim を使うと主要なJSONやYAMLをサポートしてくれるらしい。

dockerlsも入らなかった。そういうものなのか

Makefileも入れたい

search の greg対象に隠しフォルダ内のファイルも入れたい。github actions系が検索できない。

一応仕事でphpを使う機会があるの忘れてた。PHP/Laravelも設定した方が良いかも。まぁほぼメンテしかしないのでLSP無くても問題ないと思うが、、、

年末年始に色々直した。
- Pythonでuvを使うようになったけどuvはシステムにPythonを入れないのでデフォルト用のvenvを作ってプロジェクト外のちょっとしたスクリプトでもLSPを使えるようにした
- JavaのLSPが二つ起動しちゃってたりLombokが読み込まれなかった問題の修正