## 経緯
[[Neovim]]の[[Markdown]]に対する[[LSP]]は[[Marksman]]を使っていた。しかし、[[Marksman]]にはいくつか不足していると感じる点がある。
- `[[`で入力しても日本語の場合は自動で補完が出ない
- 手動コマンド実行では補完が出る
- ファイル名にホワイトスペースやアンダースコアを含むと、勝手にハイフンなどに変換される
- ファイルのリネームができない (影響範囲が修正されない)
- [[Obsidian]]の[[バックリンク]]に相当する機能がなさそう
一方、[[obsidian.nvim]]は[[LSP]]ではなくすべてバンドルされた拡張であるため、自分の[[Neovim]]システム設計にあわなそう。[[PKM]]に使える[[LSP]]が欲しいと思っていたところ、[[markdown-oxide]]を見つけた。
## 前提
- [[Neovim]]のバージョンはv0.10.1
- [[nvim-lspconfig]]を使用
- [[mason.nvim]]は使っていない. [[mise]]や[[npm]]で[[LSP]]をインストールしてる
## インストール
[[mise]]には対応していなさそうだったので、[[Cargo BInstall]]を使ってインストールする。
```console
cargo binstall --git 'https://github.com/feel-ix-343/markdown-oxide' markdown-oxide
```
## nvim-lspconfigに設定
[[nvim-lspconfig]]の設定に以下を追加。
```lua
local capabilities = require("cmp_nvim_lsp").default_capabilities()
capabilities.workspace = {
didChangeWatchedFiles = {
dynamicRegistration = true,
},
}
require("lspconfig").markdown_oxide.setup({
capabilities = capabilities,
})
```
[[nvim-cmp]]の設定の以下の部分を...
```lua
sources = cmp.config.sources({
{ name = "nvim_lsp" },
```
以下のように変更する。
```lua
sources = cmp.config.sources({
{
name = "nvim_lsp",
option = {
markdown_oxide = {
keyword_pattern = [[\(\k\| \|\/\|#\)\+]],
},
},
},
```
## 設定
`~/.config/moxide/settings.toml` を追加する。
```toml
heading_completions = false
title_headings = false
tags_in_codeblocks = false
references_in_codeblocks = false
```
プロジェクト直下には `.moxide.toml` も追加。
```toml
new_file_folder_path = "notes"
```
## 気になる点
### renameが直感的でない
ファイルのリネームは`vim.lsp.buf.rename`によって実行できる。
<div class="link-card">
<div class="link-card-header">
<img src="https://publish.obsidian.md/favicon.ico?2611375654339494a0ae" class="link-card-site-icon"/>
<span class="link-card-site-name">Markdown-Oxide Wiki</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">v0 Features Reference - Markdown-Oxide Wiki</p>
<p class="link-card-description">When clicking on each drop-down, you will be presented with a demo of the feature in Neovim following my configuration Completions Implemented Completions Features ... </p>
</div>
<img src="https://ogimage.obsidian.md/og-image.png?title=v0+Features+Reference&description=When+clicking+on+each+drop-down%2C+you+will+be+presented+with+a+demo+of+the+feature+in+Neovim+following+my+configuration++Completions+Implemented+Completions+Features+++wikilinkcompletions&siteName=Markdown-Oxide+Wiki" class="link-card-image" />
</div>
<a href="https://oxide.md/v0/References/v0+Features+Reference#Rename"></a>
</div>
が、その挙動が違和感ある。本来 `vim.lsp.buf.rename` はカーソル配下の名称、およびその参照元を変更するイメージだった。しかし、実際の挙動は **カーソル配下の名称をデフォルトinputとし、inputで指定した名称で==現在ファイル名を==変更する** という処理になっている。