a11b742fc1
All six remaining command gaps (client-side; no server change):
- VimwikiRenameFile: bare -> -nargs=? (arg accepted-ignored; rename still
delegates to the LSP rename prompt). No more E488.
- VimwikiVar / NuwikiVar: get/set the client config (upstream vimwiki#vars#cmd).
No arg prints config (Vim: g:nuwiki_*; Neovim: resolved setup() opts), one arg
gets a key, two+ sets it. Global command, both clients.
- VimwikiReturn / NuwikiReturn: command form of the smart <CR> continuation —
enters insert at EOL and fires the <CR> mapping (return_cmd / vimwiki_return).
Upstream's mode-flag args accepted but unused.
- VimwikiTableAlignQ vs AlignW: corrected — upstream's gqq/gww are identical on
a table; the only difference is the non-table fallback (native `normal! gqq`
vs `gww`). New table_align_or_cmd(cmd) aligns on a table row, else runs
`normal! <cmd>`. Q/gqq/gq1 -> gqq; W/gww/gw1 -> gww; NuwikiTableAlign -> gqq.
- VimwikiSearch / VWS: scope the lvimgrep to the current wiki's root (resolved
client-side) over <root>/**/*<ext>, not CWD `**`; empty pattern reuses the
last search. Both clients.
- VimwikiIndex family: add global Vimwiki/NuwikiIndex + TabIndex entry points
(plugin/nuwiki.vim + init.lua _setup_global_commands, with -count), so a wiki
opens from any buffer. Buffer-local copies still shadow inside wiki buffers.
Tests: surface.{Vimwiki,Nuwiki}{Return,Var}, cmd.VimwikiVar_sets_*,
cmd.global_entry_points (both harnesses). Docs (README + doc/nuwiki.txt) and the
gap doc updated. Neovim 299, Vim 291/18/21 pass.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
91 lines
4.5 KiB
VimL
91 lines
4.5 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.
|
|
"
|
|
" 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
|
|
|
|
" Plugin version, surfaced by :VimwikiShowVersion / :NuwikiShowVersion.
|
|
" Set before the Neovim early-return below so both clients see the global.
|
|
if !exists('g:nuwiki_version')
|
|
let g:nuwiki_version = '0.1.0'
|
|
endif
|
|
|
|
" 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')
|
|
" 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
|
|
|
|
" Global wiki-picker commands — available from any buffer so a wiki can be
|
|
" chosen before a .wiki file exists. The picker reads its list from config
|
|
" (no LSP); opening the chosen index then auto-starts the server. The
|
|
" buffer-local :VimwikiUISelect in ftplugin/vimwiki.vim shadows these inside
|
|
" wiki buffers but dispatches to the same function.
|
|
command! -nargs=0 VimwikiUISelect call nuwiki#commands#wiki_ui_select()
|
|
command! -nargs=0 NuwikiUISelect call nuwiki#commands#wiki_ui_select()
|
|
|
|
" Print the nuwiki version + host editor (upstream's :VimwikiShowVersion).
|
|
command! -nargs=0 VimwikiShowVersion call nuwiki#commands#show_version()
|
|
command! -nargs=0 NuwikiShowVersion call nuwiki#commands#show_version()
|
|
|
|
" Global :VimwikiIndex / :VimwikiTabIndex entry points (upstream defines the
|
|
" Index family globally in plugin/). The buffer-local copies in
|
|
" ftplugin/vimwiki.vim shadow these inside wiki buffers; these let a wiki be
|
|
" opened from any buffer. `[count]` selects the wiki number.
|
|
command! -count=0 VimwikiIndex call nuwiki#commands#wiki_index(<count>)
|
|
command! -count=0 NuwikiIndex call nuwiki#commands#wiki_index(<count>)
|
|
command! -count=0 VimwikiTabIndex call nuwiki#commands#wiki_tab_index(<count>)
|
|
command! -count=0 NuwikiTabIndex call nuwiki#commands#wiki_tab_index(<count>)
|
|
|
|
" Get/set nuwiki client globals (upstream's :VimwikiVar).
|
|
command! -nargs=* VimwikiVar call nuwiki#commands#var(<q-args>)
|
|
command! -nargs=* NuwikiVar call nuwiki#commands#var(<q-args>)
|
|
|
|
" Global entry-point mappings — work from any buffer, not just .wiki files.
|
|
" Files are opened directly from config (no LSP required); the server
|
|
" auto-starts via the FileType autocmd once the vimwiki buffer loads.
|
|
if !get(g:, 'nuwiki_no_default_mappings', 0)
|
|
" Prefix mirrors vimwiki's g:vimwiki_map_prefix (default <Leader>w). Built
|
|
" with :exe so a custom prefix relocates the whole entry-point family.
|
|
let s:prefix = get(g:, 'nuwiki_map_prefix', '<Leader>w')
|
|
exe 'nnoremap <silent> ' . s:prefix . 'w :call nuwiki#commands#open_wiki_path(0)<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . 't :call nuwiki#commands#open_wiki_path(1)<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . 's :call nuwiki#commands#wiki_ui_select()<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . 'i :call nuwiki#commands#open_diary_index_path()<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . '<Leader>w :call nuwiki#commands#open_diary_path(0)<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . '<Leader>y :call nuwiki#commands#open_diary_path(-1)<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . '<Leader>t :tabnew<CR>:call nuwiki#commands#open_diary_path(0)<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . '<Leader>m :call nuwiki#commands#open_diary_path(1)<CR>'
|
|
exe 'nnoremap <silent> ' . s:prefix . '<Leader>i :call nuwiki#commands#diary_generate_index()<CR>'
|
|
unlet s:prefix
|
|
endif
|