fix(install): resolve plugin root at source time to fix NuwikiInstall E484
<sfile> inside a command! body is evaluated at execution time, not at
definition time. When :NuwikiInstall is run interactively there is no
sourcing context, so <sfile> expands to nothing and the path collapses
to ./scripts/download_bin.vim — producing E484.
Fix: capture the path in s:plugin_root immediately while the script is
being sourced, then reference that variable from the command body.
Also hoist :NuwikiInstall above the early `finish` for Neovim so the
command is available in both editors (Neovim routes to
require('nuwiki.install').install(), Vim sources the download script).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+15
-4
@@ -12,6 +12,21 @@ if exists('g:loaded_nuwiki')
|
|||||||
endif
|
endif
|
||||||
let g:loaded_nuwiki = 1
|
let g:loaded_nuwiki = 1
|
||||||
|
|
||||||
|
" Resolve the plugin root NOW, while this script is being sourced and
|
||||||
|
" <sfile> is still valid. Commands that need this path must reference
|
||||||
|
" s:plugin_root — re-expanding <sfile> inside a command body evaluates
|
||||||
|
" at execution time when there is no sourcing context, producing an
|
||||||
|
" empty path (hence the E484 "Cannot open ./scripts/…" error).
|
||||||
|
let s:plugin_root = fnamemodify(resolve(expand('<sfile>:p')), ':h:h')
|
||||||
|
|
||||||
|
" :NuwikiInstall — install the nuwiki-ls binary without needing a
|
||||||
|
" plugin-manager build hook. Available for both Vim and Neovim.
|
||||||
|
if has('nvim')
|
||||||
|
command! -nargs=0 NuwikiInstall lua require('nuwiki.install').install()
|
||||||
|
else
|
||||||
|
command! -nargs=0 NuwikiInstall execute 'source' fnameescape(s:plugin_root . '/scripts/download_bin.vim')
|
||||||
|
endif
|
||||||
|
|
||||||
if has('nvim')
|
if has('nvim')
|
||||||
" Neovim path is initialised by `require('nuwiki').setup()`. Nothing else
|
" Neovim path is initialised by `require('nuwiki').setup()`. Nothing else
|
||||||
" to do at vimscript boot — wait until the user runs setup.
|
" to do at vimscript boot — wait until the user runs setup.
|
||||||
@@ -24,10 +39,6 @@ augroup nuwiki_vim_lsp_start
|
|||||||
autocmd FileType vimwiki call nuwiki#lsp#start()
|
autocmd FileType vimwiki call nuwiki#lsp#start()
|
||||||
augroup END
|
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'
|
|
||||||
|
|
||||||
" Global entry-point mappings — work from any buffer, not just .wiki files.
|
" Global entry-point mappings — work from any buffer, not just .wiki files.
|
||||||
" Files are opened directly from config (no LSP required); the server
|
" Files are opened directly from config (no LSP required); the server
|
||||||
" auto-starts via the FileType autocmd once the vimwiki buffer loads.
|
" auto-starts via the FileType autocmd once the vimwiki buffer loads.
|
||||||
|
|||||||
Reference in New Issue
Block a user