## 概要
[[Neovim]] 0.10がリリースされたのでバージョンアップしてみる。リリース内容は以下。
<div class="link-card">
<div class="link-card-header">
<img src="https://neovim.io/favicon.ico" class="link-card-site-icon"/>
<span class="link-card-site-name">neovim.io</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title"> News-0.10 - Neovim docs</p>
<p class="link-card-description">Neovim user documentation</p>
</div>
</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">
<div class="link-card-header">
<img src="https://gpanders.com/favicon-32x32.png" class="link-card-site-icon"/>
<span class="link-card-site-name">gpanders.com</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">What's New in Neovim 0.10 | g.p. anders</p>
<p class="link-card-description">Neovim 0.10 was the longest release cycle since the heady days of the 0.5 release. There are a ton of new features in this release (as well as some breaking changes), so be sure to check the full release notes. You can vie ... </p>
</div>
</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">
<div class="link-card-header">
<img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">GitHub</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">Implement synchronized update control sequences · Issue #8331 · microsoft/terminal</p>
<p class="link-card-description">Description of the new feature/enhancement https://gitlab.com/gnachman/iterm2/-/wi ... </p>
</div>
<img src="https://opengraph.githubassets.com/cf53e6a7ec795bf3eeb80859ae4f7c0bcfe603714b0b5879737d66638b3b8c63/microsoft/terminal/issues/8331" class="link-card-image" />
</div>
<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
```
> [[📕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.の警告が出る]]