Open22

neovim構築メモ

sueharasuehara

vim8 -> neovim 移行のメモ。もう途中までやっちゃってるけどメモを残しておかないと後でこのプラグインなんで入れたんだっけとかこれどうやってるっけがわからなくなりそう。

移行の経緯としては

  • 元々vimが好きではあるもののvimだけで開発するほど使いこなせていなかったのでVSCodeで開発していた
    • 当時の職場がPJによっては異動時にPC初期化が必要なことがあったり共通の開発サーバなどでなんだかんだ素のvimを触ることが多かったのであまりゴリゴリにカスタマイズはしないようにしてた
    • 転職して後輩に教える時に後輩PCを一瞬借りて操作するみたいなこともなく(当時も基本モブプロスタイルで頑張っていたが)自分の環境だけ考えて良くなった
  • 人手不足で開発業務以外にもやることがだいぶ増えてきて生産性を上げたい
    • VSCodeのvimはかなり頑張ってvimっぽく動いてくれるが普段なら気にならない違いも会議まであと数分だけど大したことない関数だから作っちゃおって時に見つかるとちょっとフラストレーション溜まっちゃう
  • VSCode + Neovimはもう編集部分はNeovimを呼び出す思想なので完全にvimだから試してみたい

って感じ。ただし職場で使っているGithub Copilotとvimは相性が悪いらしい(今開いているバッファの内容しか見てくれないらしい)ので仕事で使うかはわからないが、年末年始にゲームばかりするのもアレなので開発環境見直しをする。

sueharasuehara

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

sueharasuehara

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

sueharasuehara

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

sueharasuehara

格好良い見た目にしたいので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,
}
sueharasuehara

タブでBufferを開いたり切り替えたりしたいのでbarbarを追加
<C-j><C-k>で切り替えられるようにしておく

sueharasuehara

ファイラとしてneo-treeを追加。特にこだわりはないので変えるかも。まだアイコンは表示できてない。。。なんか気分が上がらないなぁと思いつつ、パッと表示できなかった。

lazyvimを入れようとも思ったが、starterで入れると諸々の設定が隠されてしまったのでkickstartをベースにlazyvimのutilやconfをまるっと拝借することにした。nvim/lua/lazyvim に lua配下のconfig, utilを配置してある。

https://zenn.dev/airrnot1106/articles/4849bf6eb2c149
neo-treeで隠しファイルが見れなかったので追加

sueharasuehara

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

sueharasuehara

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

sueharasuehara

Javaを使うために色々苦戦中。とりあえずnvim-javaを入れているので最低限書けるようにはなった。
LSPの設定がむずい。Eclipseは偉大やったんや、、、フォーマッターの設定をMavenに持たせるかvimに持たせちゃうかが悩みどころ。今の仕事では自分でフォーマッターの設定ができるがプロジェクトごとに分けれた方が良いと思う。けどわざわざMavenにフォーマッターの設定書いてあるプロジェクトがどれくらいあるものか(SI時代は当然あったが)

下記あたりを参考にある程度快適にコーディングできるようにしたい。年始に頭痛と吐き気で結構な期間動けなかったのが痛い...
https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#java_language_server
https://alpha2phi.medium.com/neovim-for-beginners-java-6a86cf1a91a5
https://alpha2phi.medium.com/neovim-pde-java-97aeda910c3a

sueharasuehara

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

sueharasuehara

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

sueharasuehara

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

sueharasuehara

年末年始に色々直した。