## 経緯 [[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で指定した名称で==現在ファイル名を==変更する** という処理になっている。