## 概要 [[Neovim]] 0.10がリリースされたのでバージョンアップしてみる。リリース内容は以下。 <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.10 - Neovim docs </div> <div class="link-card-v2-content"> Neovim user documentation </div> <a href="https://neovim.io/doc/user/news-0.10.html"></a> </div> ## 事前準備 [[lazy.nvim]]で`sync`しておく。 なぜか[[Neovim]]の[[ウィンドウ (Vim)|ウィンドウ]]をすべて閉じると[[no-neck-pain.nvim]]がエラーになる。 ```error Error executing vim.schedule lua callback: ...re/nvim/lazy/no-neck-pain.nvim/lua/no-neck-pain/wins.lua:53: Vim:E444: Cannot close last window stack traceback: [C]: in function 'nvim_win_close' ...re/nvim/lazy/no-neck-pain.nvim/lua/no-neck-pain/wins.lua:53: in function 'close' ...re/nvim/lazy/no-neck-pain.nvim/lua/no-neck-pain/main.lua:449: in function <...re/nvim/lazy/no-neck-pain.nvim/lua/no-neck-pain/main.lua:425> ``` 一度捨ておく。 ## Neovim 0.10.0のインストール [[mise]]でインストールする。いつでも0.9.5を利用できるよう別バージョンでインストール。 ```console mise use -g [email protected] ``` ```console $ vim --version NVIM v0.10.0 Build type: Release LuaJIT 2.1.1713484068 Run "nvim -V1 -v" for more info ``` 変更点が多いので、以下のセクションにあわせて確認・対応していく。 <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.10 | g.p. anders </div> <div class="link-card-v2-content"> Neovim 0.10 was the longest release cycle since the heady days of the 0.5 release. There are a ton of new featur ... </div> <a href="https://gpanders.com/blog/whats-new-in-neovim-0.10/"></a> </div> ## Defaults ### Colorscheme パッと見で気になることはない。 ### LSP and Diagnostics Mappings `[d`と`]d`で前後のdiagnosticに移動できることを確認。[[Lspsaga]]の方が見やすいので引き続きそのまま。 ![[Pasted image 20240518131328.png|frame]] *[[Lspsaga]]の場合* ## Builtin Commenting [[nvim-comment]]なしでもコメントアウトできるようになった。 ...と思ったが、vueファイルのように1ファイルの中で複数のcontextを持つケースにはまだ対応されていなそう。具体的には ```html <script></script> <template></template> ``` で `<template>` 内はコメントアウトできない。 対策としては引き続き以下のプラグインを使う。 - [[nvim-comment]] - [[nvim-ts-context-commentstring]] ## Terminal UI enhancements ### Synchronized Output [[Windows Terminal]]ではサポートされてなさそうなのでスルー。 <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"> Implement synchronized update control sequences · Issue #8331 · microsoft/terminal </div> <div class="link-card-v2-content"> Description of the new feature/enhancement https://gitlab.com/gnachman/iterm2/-/wikis/synchronized-updates-spec ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/0f184e025838bc679c7e517eb07fd898c9c16a45898ca78ce95496a3865e7cf0/microsoft/terminal/issues/8331" /> <a href="https://github.com/microsoft/terminal/issues/8331"></a> </div> ### System clipboard synchronization [[SSH]]セッションで利用しているわけではないためスルー。基本はLocal。 ### Hyperlinks [[Neovim]] 0.10からはハイパーリングの表現が強化された。 ![[Pasted image 20240518133622.png|frame]] *[[Neovim]] 0.9.5* ![[Pasted image 20240518133756.png|frame]] *[[Neovim]] 0.10.0* [[Neovim]] 0.10.0では波線が表示され、マウスカーソルを合わせると『`Ctrl+クリック`でリンク先へ移動』する旨が表示される。`Ctrl+クリック`でブラウザが開く。 ### Automatic truecolor detection `truecolor`サポートの判定が自動化されたようなので、以下の設定は不要になった。 ```lua vim.opt.termguicolors = true ``` ...のかと思いきやエラーが... ```error Error detected while processing /home/tadashi-aikawa/.config/nvim/init.lua: &termguicolors must be set ``` たかだか一行なので現状維持で。 ## LSP inlay hints [[LSP inlay hints (Neovim)|LSP inlay hints]]がサポートされた。 ![[Pasted image 20240518145701.png|frame]] *Rustの例* [[virtual text (Neovim)|virtual text]]と少し似ているが、文の途中に挿入できる点が大きな違いである。デフォルトだとoffなので有効化が必要。 ```lua vim.lsp.inlay_hint.enable() ``` 設定は`LspAttach`の中で追加。 ```lua vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("UserLspConfig", {}), callback = function(ev) -- 中略 local client = vim.lsp.get_client_by_id(ev.data.client_id) -- inlay hint if client.supports_method("textDocument/inlayHint") then vim.lsp.inlay_hint.enable() end ``` > [[Inlay hintsを表示 (Neovim)|Inlay hintsを表示]] 起動直後に表示されない仕様に気づかず、しばらくハマった。。(表示する方法もありそうだけど、そこまで時間使いたくないので一旦切り上げる) > [[📝NeovimでInlay hintsの設定をしてもInlay hintsが表示されない]] [[LSP inlay hints (Neovim)|LSP inlay hints]]は入力中にカーソル位置や入力内容が著しく動くので一長一短だとは思う。[[Rust]]のように難解な言語の場合は恩恵を得られるが、その他の言語でどこまでその機能を利用するかは賛否両論。(個人的には[[Rust]]以外はなくてもいいかも...) ## Tree-sitter query editor [[シンタックスツリー]]に関する便利機能の話。個人的には興味ないのでスルー。 ## Miscellaneous - `bo te`でターミナルを下に即座に開けるのは便利かも - [[ビジュアルモード]]で選択した範囲に対しマクロを実行すると、各行ごとにマクロが実行されるようになった - 視覚的にマクロを一気に実行したいことはそこそこあったのでこれも便利! ## トラブルシューティング その他、トラブルなど。 - [[📝Neovim0.10にアップデートしたらlua-language-serverからUndefined global vim.の警告が出る]]