fix(ftplugin): load on .wiki buffers without manual filetype override
Three reasons the plugin wasn't activating on `nvim --clean -u init.lua
foo.wiki`:
1. **File-name mismatch.** Vim's filetype-plugin runtime looks for
`ftplugin/<filetype>.vim` matching the *filetype name*. Our
filetype is `vimwiki` (per `ftdetect`) but the file was named
`ftplugin/nuwiki.vim` — so `:runtime! ftplugin/vimwiki.vim` from
the built-in FileType autocmd never found it, and none of the
`:Vimwiki*` / `:Nuwiki*` commands got defined. Same wart on the
syntax side. Renamed:
- `ftplugin/nuwiki.vim` → `ftplugin/vimwiki.vim`
- `syntax/nuwiki.vim` → `syntax/vimwiki.vim`
2. **`setfiletype` deferred to Neovim's bundled rule.** Neovim ships
a default `*.wiki → mediawiki` rule via `vim.filetype.add`, and
`:setfiletype vimwiki` is a no-op once a filetype has been set.
- `ftdetect/nuwiki.vim` now uses `set filetype=vimwiki` (force).
- `lua/nuwiki/init.lua`'s `setup()` also calls
`vim.filetype.add({ extension = { wiki = 'vimwiki', ... } })`
so the modern table-based detection picks us before the
bundled rule fires. Honours `config.options.file_extension`
so a user with a custom extension gets covered automatically.
3. **`foldmethod`/`foldexpr` are window-local options.**
`ftplugin.lua` was setting them with `nvim_set_option_value({ buf
= bufnr })`, which threw `'buf' cannot be passed for window-local
option 'foldmethod'` and aborted the rest of the per-buffer
attach. Switched to `vim.opt_local.*` (window-aware), applied on
the current window when the ftplugin fires, and re-applied via a
`BufWinEnter` autocmd so `:split` / `:vsplit` keep the fold mode.
Verified end-to-end with:
nvim --clean -u init.lua sample.wiki
→ filetype = vimwiki
→ :VimwikiTOC, :NuwikiIndex, … all defined
→ foldmethod = expr, foldexpr = v:lua.vim.lsp.foldexpr()
→ ftdetect, plugin, ftplugin, syntax all in :scriptnames
Total 377 tests still pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
" syntax/nuwiki.vim — default highlight groups for nuwiki.
|
||||
"
|
||||
" Two responsibilities:
|
||||
" 1. Default `@vimwiki*` highlight groups for the LSP semantic tokens
|
||||
" (SPEC §11 P7). Loaded eagerly so the very first hover/highlight
|
||||
" cycle after server startup already has colours.
|
||||
" 2. A small regex-based fallback so static highlighting works on
|
||||
" buffers where the LSP isn't running yet.
|
||||
|
||||
if exists('b:current_syntax')
|
||||
finish
|
||||
endif
|
||||
|
||||
" ===== Semantic-token defaults (Neovim's TS-style @group names) =====
|
||||
|
||||
" Headings — level modifiers map to progressively softer accents.
|
||||
highlight default link @vimwikiHeading Title
|
||||
highlight default link @vimwikiHeading.level1 Title
|
||||
highlight default link @vimwikiHeading.level2 Function
|
||||
highlight default link @vimwikiHeading.level3 Identifier
|
||||
highlight default link @vimwikiHeading.level4 Type
|
||||
highlight default link @vimwikiHeading.level5 Constant
|
||||
highlight default link @vimwikiHeading.level6 PreProc
|
||||
highlight default link @vimwikiHeading.centered Title
|
||||
|
||||
" Inline text styling.
|
||||
highlight default link @vimwikiBold markdownBold
|
||||
highlight default link @vimwikiItalic markdownItalic
|
||||
highlight default link @vimwikiBoldItalic markdownBoldItalic
|
||||
highlight default link @vimwikiStrikethrough Comment
|
||||
highlight default link @vimwikiSuperscript Number
|
||||
highlight default link @vimwikiSubscript Number
|
||||
|
||||
" Code + math.
|
||||
highlight default link @vimwikiCode String
|
||||
highlight default link @vimwikiCodeBlock String
|
||||
highlight default link @vimwikiMath Number
|
||||
highlight default link @vimwikiMathBlock Number
|
||||
|
||||
" Links + transclusions.
|
||||
highlight default link @vimwikiWikilink Underlined
|
||||
highlight default link @vimwikiExternalLink Underlined
|
||||
highlight default link @vimwikiUrl Underlined
|
||||
highlight default link @vimwikiTransclusion Identifier
|
||||
|
||||
" Misc.
|
||||
highlight default link @vimwikiKeyword Todo
|
||||
highlight default link @vimwikiColor Constant
|
||||
highlight default link @vimwikiComment Comment
|
||||
highlight default link @vimwikiDefinitionTerm Statement
|
||||
|
||||
" ===== Static fallback (no LSP required) =====
|
||||
|
||||
syntax case match
|
||||
|
||||
syntax match nuwikiHeading /^\s*=\{1,6}\s.\{-}\s=\{1,6}\s*$/
|
||||
syntax match nuwikiHorizontal /^-\{4,}\s*$/
|
||||
syntax match nuwikiCommentLine /^%%.*$/
|
||||
syntax region nuwikiCommentBlock start=/^%%+/ end=/+%%/ keepend
|
||||
syntax region nuwikiPreformatted start=/^{{{/ end=/^}}}/ keepend
|
||||
syntax region nuwikiMathBlock start=/^{{\$/ end=/^}}\$/ keepend
|
||||
syntax match nuwikiPlaceholder /^%\(title\|nohtml\|template\|date\)\>.*$/
|
||||
|
||||
syntax match nuwikiBold /\*[^*]\+\*/
|
||||
syntax match nuwikiItalic /\<_[^_]\+_\>/
|
||||
syntax match nuwikiCode /`[^`]\+`/
|
||||
syntax match nuwikiMathInline /\$[^$]\+\$/
|
||||
syntax match nuwikiKeyword /\<\(TODO\|DONE\|STARTED\|FIXME\|FIXED\|XXX\)\>/
|
||||
syntax region nuwikiWikilink start=/\[\[/ end=/\]\]/ keepend
|
||||
syntax region nuwikiTransclusion start=/{{[^{]/ end=/}}/ keepend
|
||||
syntax match nuwikiUrl /\<\(https\?\|ftp\|mailto\|file\):\/\?\/\?\S\+/
|
||||
|
||||
highlight default link nuwikiHeading Title
|
||||
highlight default link nuwikiHorizontal Comment
|
||||
highlight default link nuwikiCommentLine Comment
|
||||
highlight default link nuwikiCommentBlock Comment
|
||||
highlight default link nuwikiPreformatted String
|
||||
highlight default link nuwikiMathBlock Number
|
||||
highlight default link nuwikiPlaceholder PreProc
|
||||
highlight default link nuwikiBold Bold
|
||||
highlight default link nuwikiItalic Italic
|
||||
highlight default link nuwikiCode String
|
||||
highlight default link nuwikiMathInline Number
|
||||
highlight default link nuwikiKeyword Todo
|
||||
highlight default link nuwikiWikilink Underlined
|
||||
highlight default link nuwikiTransclusion Identifier
|
||||
highlight default link nuwikiUrl Underlined
|
||||
|
||||
let b:current_syntax = 'vimwiki'
|
||||
Reference in New Issue
Block a user