## 概要 [[Neovim]] 0.11がリリースされたのでバージョンアップしてみる。リリース内容は以下。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://neovim.io/favicon.ico" /> <span class="link-card-v2-site-name">neovim.io</span> </div> <div class="link-card-v2-title"> News-0.11 - Neovim docs </div> <div class="link-card-v2-content"> Neovim user documentation </div> <a href="https://neovim.io/doc/user/news-0.11.html"></a> </div> 更新内容の把握と対応については以下の記事を参考にする。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://gpanders.com/favicon-32x32.png" /> <span class="link-card-v2-site-name">gpanders.com</span> </div> <div class="link-card-v2-title"> What's New in Neovim 0.11 | g.p. anders </div> <div class="link-card-v2-content"> Neovim 0.11 was just released. As in previous installments in this series, let’s talk a bit about some of the bi ... </div> <a href="https://gpanders.com/blog/whats-new-in-neovim-0-11/"></a> </div> ## 環境 | 対象 | バージョン | | ---------- | ----------- | | [[Ubuntu]] | 24.04.1 LTS | | [[Neovim]] | 0.11.0 | | [[mise]] | 2025.3.11 | ## 事前準備 [[🦉owl-playbook]]はブランチ (`neovim-0.11`) を切っておく。 ## neovim 0.11.0のインストール [[mise]]でインストールする。 ```console mise up neovim ``` > [!error]- 404 Not Foundエラーになる場合 > > [[mise]]のバージョンが `2025.1.6` で発生した。 > > ```error > mise ERROR failed to install aqua:neovim/[email protected] > mise ERROR HTTP status client error (404 Not Found) for url (https://api.github.com/repos/neovim/neovim/releases/tags/0.11.0) > mise ERROR no asset found: nvim-linux64.tar.gz > Available assets: > nvim-linux-arm64.appimage > nvim-linux-arm64.appimage.zsync > nvim-linux-arm64.tar.gz > nvim-linux-x86_64.appimage > nvim-linux-x86_64.appimage.zsync > nvim-linux-x86_64.tar.gz > nvim-macos-arm64.tar.gz > nvim-macos-x86_64.tar.gz > nvim-win64.msi > nvim-win64.zip > shasum.txt > mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information > ``` > > [[miseをアップデート]]したら次は成功した。 > > ``` > New release found! v2025.1.6 --> v2025.3.11 > ``` > > [[mise]]のせいなのかは不明。 バージョンは0.11.0。 ```console $ nvim --version NVIM v0.11.0 Build type: Release LuaJIT 2.1.1741730670 Run "nvim -V1 -v" for more info ``` ## プラグインのバージョンアップ [[lazy.nvim]]の `Sync` で最新化する。 > [!note]- バージョンアップ後のプラグインとコミットハッシュ > | Plugin | Commit | > |--------|--------| > | CamelCaseMotion | de439d7c | > | Comment.nvim | e30b7f20 | > | LuaSnip | c9b9a229 | > | ReplaceWithRegister | 832efc23 | > | aerial.nvim | 9ebc1358 | > | barbar.nvim | 807bede7 | > | blame.nvim | 39bb4cda | > | cmp-buffer | 3022dbc9 | > | cmp-cmdline | d250c63a | > | cmp-dictionary | fecc3ef2 | > | cmp-nvim-lsp | 99290b3e | > | cmp-path | 91ff86cd | > | cmp_luasnip | 98d9cb5c | > | codecompanion.nvim | fc950988 | > | conform.nvim | f9ef25a7 | > | copilot.lua | d661d65b | > | denops.vim | 4ff8f353 | > | diffview.nvim | 4516612f | > | fidget.nvim | d9ba6b7b | > | flash.nvim | 3c942666 | > | fzf | ba6d1b87 | > | gitgraph.nvim | 01e466b3 | > | gitlinker.nvim | 23982c86 | > | gitsigns.nvim | 3c76f7fa | > | grug-far.nvim | 9411a993 | > | lasterisk.nvim | bbcfcaec | > | lazy.nvim | 6c3bda4a | > | lazydev.nvim | 2367a6c0 | > | lazygit.nvim | b9eae3ba | > | lsp_signature.nvim | b58cca00 | > | lspkind.nvim | d79a1c32 | > | lspsaga.nvim | 778d56ff | > | lualine.nvim | 1517caa8 | > | luvit-meta | 1df30b60 | > | markdown-preview.nvim | a923f5fc | > | markdown-toggle.nvim | 0b9d917c | > | mini.icons | 86a633f0 | > | no-neck-pain.nvim | 53c8ef09 | > | noice.nvim | 0427460c | > | ns-textobject.nvim | 6341bc16 | > | nui.nvim | 8d3bce97 | > | nvim-autopairs | 65220277 | > | nvim-bqf | e20417d5 | > | nvim-cmp | 1e1900b0 | > | nvim-highlight-colors | 9f934dd1 | > | nvim-hlslens | 00b9c735 | > | nvim-lspconfig | 0a1ac55d | > | nvim-notify | 22f29093 | > | nvim-scrollbar | 6994eb9f | > | nvim-surround | caf6f633 | > | nvim-treesitter-context | 93b29a32 | > | nvim-treesitter | 86768fdd | > | nvim-ts-autotag | a1d526af | > | nvim-ufo | 5b75cf5f | > | nvim-web-devicons | aafa5c18 | > | oil.nvim | ab887d92 | > | plenary.nvim | 857c5ac6 | > | promise-async | 119e8961 | > | quicker.nvim | 1798be71 | > | render-markdown.nvim | a1fc4e55 | > | schemastore.nvim | e659e0c6 | > | screenkey.nvim | 16390931 | > | smart-open.nvim | 7770b01c | > | snacks.nvim | bc0630e4 | > | sqlite.lua | 50092d60 | > | sqls.nvim | d1bc5421 | > | telescope-fzy-native.nvim | 282f0695 | > | telescope.nvim | a4ed8250 | > | text-case.nvim | e898cfd4 | > | timber.nvim | 84e29132 | > | tiny-inline-diagnostic.nvim | 0a3be983 | > | todo-comments.nvim | 304a8d20 | > | toggleterm.nvim | 50ea089f | > | tokyonight.nvim | 057ef5d2 | > | treesj | 6c616638 | > | trouble.nvim | 85bedb7e | > | vim-illuminate | 19cb21f5 | > | vim-repeat | 65846025 | > | vim-table-mode | e4365bde | > | vim-textobj-entire | 64a856c9 | > | vim-textobj-user | 41a675dd | > | winresizer | 9bd559a0 | ## 新機能 気になったものだけ。 ### [[virtual lines diagnostic (Neovim)|virtual lines diagnostic]] [[lsp_lines.nvim]]の作者や協力者の力を借りて追加された機能。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://gpanders.com/favicon-32x32.png" /> <span class="link-card-v2-site-name">gpanders.com</span> </div> <div class="link-card-v2-title"> What's New in Neovim 0.11 | g.p. anders </div> <div class="link-card-v2-content"> Neovim 0.11 was just released. As in previous installments in this series, let’s talk a bit about some of the bi ... </div> <a href="https://gpanders.com/blog/whats-new-in-neovim-0-11/#virtual-lines"></a> </div> ![[Pasted image 20250330214503.png]] `vim.diagnostic.config` で `virtual_lines = true` を指定すると有効にできる。 ```lua vim.diagnostic.config({ virtual_lines = true, }) ``` 検討の結果、[[tiny-inline-diagnostic.nvim (Neovim)|tiny-inline-diagnostic.nvim]]を使い続けることにした。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" /> <span class="link-card-v2-site-name">Minerva</span> </div> <div class="link-card-v2-title"> 💿VIM-0000 Neovim LSP diagnosticsのvirtual_lineを使う </div> <div class="link-card-v2-content">大きな理由は以下3点。ただ、今後気が変わる可能性はあるので引き続きウォッチしていく。- virtual lineによってコードの表示位置がコロコロ変わることが耐えられないくらいnoisyである- tiny-inline-diagnostic.nvimの方が直感的で見やすい- ピンポイントにDiagnosticの場所を指さなくてもほぼ問題はない (なかった)</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/vim-adr.webp" /> <a data-href="💿VIM-0000 Neovim LSP diagnosticsのvirtual_lineを使う" class="internal-link"></a> </div> %%[[💿VIM-0000 Neovim LSP diagnosticsのvirtual_lineを使う]]%% ### Terminal New mappings `[[` and `]]` `[[` と `]]` で前後のコマンドに移動できるようになった。([[モーション]]というわけではなさそう) [[Zsh]]の場合 `~/.zshrc` に以下を追加。 ```zsh # OSC 133 sequences preexec() { printf "\033]133;A\033\\" } precmd() { printf "\033]133;B\033\\" } ``` ## 変更点 ### vim.diagnostic.config の virtual_text がデフォルトfalseに 0.10までは `true` だったので、[[tiny-inline-diagnostic.nvim (Neovim)|tiny-inline-diagnostic.nvim]]の設定などで `false` にする必要があったが不要になった。 ```diff return { "rachartier/tiny-inline-diagnostic.nvim", event = "LspAttach", priority = 1000, config = function() require("tiny-inline-diagnostic").setup({ options = { show_source = true, multilines = { enabled = true, always_show = false, }, }, }) - vim.diagnostic.config({ - -- native LSPのインライン表示を無効にする - virtual_text = false, - }) end, } ``` <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://gpanders.com/favicon-32x32.png" /> <span class="link-card-v2-site-name">gpanders.com</span> </div> <div class="link-card-v2-title"> What's New in Neovim 0.11 | g.p. anders </div> <div class="link-card-v2-content"> Neovim 0.11 was just released. As in previous installments in this series, let’s talk a bit about some of the bi ... </div> <a href="https://gpanders.com/blog/whats-new-in-neovim-0-11/#virtual-text-handler-changed-from-opt-out-to-opt-in"></a> </div> ## トラブルシューティング 問題が発生したら追加していく。 ### sign_defineが非推奨になっている 以下の警告が出る。 ```warning Defining diagnostic signs with :sign-define or sign_define() is deprecated. Run ":checkhealth vim.deprecated" for more information ``` `:checkhealth vim.deprecated` の結果。 ```warning - WARNING Defining diagnostic signs with :sign-define or sign_define() is deprecated. Feature will be removed in Nvim 0.12 - ADVICE: - use vim.diagnostic.config() instead. ``` [[nvim-lspconfig]]の以下が原因。 ```diff local signs = { Error = "●", Warn = "●", Hint = "●", Info = "●" } for type, icon in pairs(signs) do local hl = "DiagnosticSign" .. type vim.fn.sign_define(hl, { text = icon, texthl = hl }) end ``` これを削除して `base.lua` の [[LspAttach (Neovim)|LspAttach]]イベントで設定する。 ```lua vim.api.nvim_create_autocmd("LspAttach", { -- 中略 local signs = { Error = "●", Warn = "●", Hint = "●", Info = "●" } vim.diagnostic.config({ signs = { text = { [vim.diagnostic.severity.ERROR] = signs.Error, [vim.diagnostic.severity.WARN] = signs.Warn, [vim.diagnostic.severity.INFO] = signs.Info, [vim.diagnostic.severity.HINT] = signs.Hint, }, }, }) }) ``` ### コードブロックの最終行が見えなくなった こういうコードを書いたとき。 ~~~ ```lua local a = 1 local b = 1 ``` ~~~ 今まではこうだった。 ![[Pasted image 20250331000526.png]] それがこうなった。 ![[Pasted image 20250331000903.png]] 109行目を見落としてしまうし、コードブロックの見栄えとしても[[padding]]がなくて悪い。Miscellaneousに記述があった。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://gpanders.com/favicon-32x32.png" /> <span class="link-card-v2-site-name">gpanders.com</span> </div> <div class="link-card-v2-title"> What's New in Neovim 0.11 | g.p. anders </div> <div class="link-card-v2-content"> Neovim 0.11 was just released. As in previous installments in this series, let’s talk a bit about some of the bi ... </div> <a href="https://gpanders.com/blog/whats-new-in-neovim-0-11/#miscellaneous"></a> </div> > Extmarks now have the ability to conceal entire lines, rather than just characters within a line. This is used, for example, in Markdown buffers to hide code fences (e.g. ```) when conceallevel is set without leaving empty lines. [[render-markdown.nvim]]の設定変更で対応できそう。 ```lua return { "MeanderingProgrammer/render-markdown.nvim", -- 中略 opts = { -- 中略 code = { -- [追加] border = "thin", }, }, } ``` <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> fix: support for code border for 0.11, disable conceal_lines highlights · MeanderingProgrammer/render-markdown.nvim@e6c8081 </div> <div class="link-card-v2-content"> ## DetailsRelated issues:- https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/351- https://gith ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/872d4c3c4f8755548aeb6d131513d82220876b7b1e4e77bbedf86a3ca8a037cb/MeanderingProgrammer/render-markdown.nvim/commit/e6c8081691881fd63b4d72cb472094ac190ac56e" /> <a href="https://github.com/MeanderingProgrammer/render-markdown.nvim/commit/e6c8081691881fd63b4d72cb472094ac190ac56e"></a> </div> ## Native LSPへの移行 ### lsp_signature.nvim をやめられるか? nativeの機能で[[lsp_signature.nvim]]を代用できるか確かめる。 [[挿入モード]]で以下のようにサジェストが出ればOK。 ![[Pasted image 20250405131939.png]] ![[Pasted image 20250405131958.png]] 以下の点で[[lsp_signature.nvim]]を使い続ける恩恵がありあそう。 - 表示が好み - 表示位置が好み - `vim.lsp.buf.signature_help()` は手動実行が必要 - [[autocmd (Neovim)|autocmd]]で設定可能だろうけど、そこ頑張るなら[[lsp_signature.nvim]]使いたい - 高機能な気がする ### blink.cmpへの移行 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" /> <span class="link-card-v2-site-name">Minerva</span> </div> <div class="link-card-v2-title"> 📜2025-04-02 nvim-cmpからblink.cmpに移行してみる </div> <div class="link-card-v2-content">nvim-cmpからRust製の高速補完プラグインblink.cmpへ移行した経緯や設定方法、LSPやバッファ、パス、ユーザー辞書、スニペット、カラープレビューなど主要な補完機能の対応状況、LazyVimやnvim-lspconfigとの連携、キーバインドや見た目のカスタマイズ、移行時の注意点についての記録。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2025-04-02 nvim-cmpからblink.cmpに移行してみる" class="internal-link"></a> </div> %%[[📜2025-04-02 nvim-cmpからblink.cmpに移行してみる]]%%