## 経緯
以下の対応をして、[[nvim-cmp]]と一式をすべて削除したので、[[obsidian.nvim]]も[[blink.cmp (Neovim)|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に移行してみる]]%%
## 前提
`obsidian-nvim/obsidian.nvim` は利用しない。理由は個人的に[[obsidian.nvim]]をforkして使っており、修正量が多そうだから。特に補完周りは日本語を考慮した対応を入れているので複雑になりそう。
### 環境
| 対象 | バージョン |
| --------------------------------------- | ---------------------------------------- |
| [[Ubuntu]] | 24.04.1 LTS |
| [[Neovim]] | 0.11.0 |
| [[blink.cmp (Neovim)\|blink.cmp]] | `cb5e346` |
| [[blink.compat (Neovim)\|blink.compat]] | `2ed6d9a` |
| [[obsidian.nvim]] | `tadashi-aikawa/obsidian.nvim` `97e6fd5` |
## Issueを調べる
以下のIssueで議論されている。
<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">
Support blink.nvim Autocomplete · Issue #770 · epwalsh/obsidian.nvim
</div>
<div class="link-card-v2-content">
🚀 The feature, motivation and pitch Currently obsidian.nvim does not work with blink.nvim, only with nvim-cmp. ...
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/7f4fdbb652c34ecf1b091e2871506fb7c35f8ae867f75f00220905cb476feb52/epwalsh/obsidian.nvim/issues/770" />
<a href="https://github.com/epwalsh/obsidian.nvim/issues/770"></a>
</div>
## 設定
関係しそうな箇所だけ抜粋。ほかにも `obsidian_new` や `obsidian_tags` があったけど、自分は使わないのでカット。`buffer` も日本語だとノイズが多いのでカット。
```lua
return {
"saghen/blink.cmp",
dependencies = {
"L3MON4D3/LuaSnip",
-- [追加]
{ "saghen/blink.compat", lazy = true },
},
opts = {
sources = {
-- [変更]
per_filetype = {
markdown = { "obsidian", "dictionary", "path", "snippets" },
},
providers = {
-- [追加]
obsidian = {
name = "obsidian",
module = "blink.compat.source",
-- [追加] internal linkを優先表示する
score_offset = 1000,
},
},
},
},
```
## コードを変更
このままでは候補を決定したとき、かならず半角4文字分おまけがついてくることに気づいた。
![[Pasted image 20250406194044.png|frame]]
*`deno` と入力して選択したあとの結果*
以下の対応が裏目に出たのかもしれない。
<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-03-23 obsidian.nvimで特定の条件下で補完を決定すると入力文字が残って挿入されてしまう不具合の解消
</div>
<div class="link-card-v2-content">Claude 3.7 Sonnetが言うには `can_complete` の中でマルチバイト文字が考慮されていないため、insert位置が不正になっているのが問題ではないかとのこと。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2025-03-23 obsidian.nvimで特定の条件下で補完を決定すると入力文字が残って挿入されてしまう不具合の解消" class="internal-link"></a>
</div>
%%[[📜2025-03-23 obsidian.nvimで特定の条件下で補完を決定すると入力文字が残って挿入されてしまう不具合の解消]]%%
上記対応をrevertしたらなおった...。[[nvim-cmp]]だと何がまずかったのだろうか...? もしかすると [[nvim-cmp]] では対応できていなかったマルチバイト考慮を、[[blink.cmp (Neovim)|blink.cmp]] や [[blink.compat (Neovim)|blink.compat]] ではやってくれているのかもしれない...。
<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">
Revert "fix: Inserting completions into sentences containing multibyt… · tadashi-aikawa/obsidian.nvim@bee3429
</div>
<div class="link-card-v2-content">
…e characters causes insertion positions and ranges to shift"This reverts commit 4812505c499179d73fbb6778a3702d2 ...
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/00c461d590c5be885a51e2115a3d4000f3bde78aacc42bf8f59f2dd1b612c687/tadashi-aikawa/obsidian.nvim/commit/bee34297995c7a1a48a7eed8419c5f308e5b7586" />
<a href="https://github.com/tadashi-aikawa/obsidian.nvim/commit/bee34297995c7a1a48a7eed8419c5f308e5b7586"></a>
</div>