ee61d40872
P5 + P6 resolved (SPEC §11): Neovim 0.11+ and Vim 9.1+.
Universal Vim entry:
- plugin/nuwiki.vim dispatches Vim vs Neovim. Neovim path waits for
the user's `require('nuwiki').setup()` call; Vim path starts the
LSP client on `FileType vimwiki` and exposes `:NuwikiInstall`.
- ftdetect/nuwiki.vim associates `*.wiki` with the `vimwiki` filetype.
- ftplugin/nuwiki.vim sets commentstring + comments + formatoptions +
suffixesadd + iskeyword, with a clean `b:undo_ftplugin`.
- syntax/nuwiki.vim ships default `@vimwiki*` highlight links for the
semantic-token legend (with `level1..6` + `centered` modifiers),
plus a minimal regex fallback so static highlighting works before
the LSP attaches.
Lua glue (Neovim 0.11+):
- init.lua exposes setup() / install() / health() — wiring only per
SPEC §6.2.
- config.lua holds the §7.5 schema (wiki_root / file_extension /
syntax / log_level) and a tbl_deep_extend apply().
- lsp.lua registers via `vim.lsp.config{} + vim.lsp.enable` on 0.11+;
falls back to a FileType autocmd calling `vim.lsp.start` on older
builds. Root dir walks up for `.git` / `.nuwiki`, then uses
wiki_root.
- install.lua does target-triple detection (Linux gnu/musl x x86_64/
aarch64, macOS arm/x86, Windows), curl+tar download from the
release URL, cp/chmod into bin/, with a cargo fallback. Honours
`g:nuwiki_build_from_source`.
- health.lua implements `:checkhealth nuwiki` per §7.6.
VimL glue (Vim 9.1+):
- autoload/nuwiki/lsp.vim follows §7.4 preference order:
vim-lsp (calls `lsp#register_server`) → coc.nvim (prints the
coc-settings.json snippet) → error.
- scripts/download_bin.vim mirrors the Lua installer for Dein /
vim-plug build hooks — same target triples, same download →
fallback → cargo build chain.
Help: doc/nuwiki.txt with tags for install (lazy.nvim / vim-plug /
Dein), config options, health, LSP feature list, `:NuwikiInstall`.
Rust workspace unchanged this phase; 172 tests still green locally.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
1.0 KiB
VimL
30 lines
1.0 KiB
VimL
" plugin/nuwiki.vim — universal Vim/Neovim entry point.
|
|
"
|
|
" Neovim 0.11+ users are expected to call `require('nuwiki').setup({})` from
|
|
" their config (lazy.nvim does this automatically through `opts`). On Vim
|
|
" we start the LSP client when a vimwiki buffer is loaded.
|
|
"
|
|
" Per SPEC §6.2 / §6.3 this file contains wiring only — all logic lives in
|
|
" the Rust language server.
|
|
|
|
if exists('g:loaded_nuwiki')
|
|
finish
|
|
endif
|
|
let g:loaded_nuwiki = 1
|
|
|
|
if has('nvim')
|
|
" Neovim path is initialised by `require('nuwiki').setup()`. Nothing else
|
|
" to do at vimscript boot — wait until the user runs setup.
|
|
finish
|
|
endif
|
|
|
|
" Vim path: start the LSP client the first time a vimwiki buffer is opened.
|
|
augroup nuwiki_vim_lsp_start
|
|
autocmd!
|
|
autocmd FileType vimwiki call nuwiki#lsp#start()
|
|
augroup END
|
|
|
|
" :NuwikiInstall — convenience wrapper around scripts/download_bin.vim, so
|
|
" users don't have to invoke a plugin-manager build hook by hand.
|
|
command! -nargs=0 NuwikiInstall execute 'source' fnamemodify(resolve(expand('<sfile>:p')), ':h:h') . '/scripts/download_bin.vim'
|