mirror of
https://github.com/neovim/neovim.git
synced 2025-12-09 16:12:48 +00:00
rplugin: Call s:LoadRemotePlugins() on startup.
Dispense with the FuncUndefined/CmdUndefined quasi-optimization. If there are no rplugins, plugin/rplugin.vim takes less than 1ms. Closes #5821 Closes #6250 Helped-by: Qiming zhao <chemzqm@gmail.com>
This commit is contained in:
@@ -1,16 +1,59 @@
|
||||
if exists('g:loaded_remote_plugins')
|
||||
finish
|
||||
endif
|
||||
let g:loaded_remote_plugins = 1
|
||||
let g:loaded_remote_plugins = '/path/to/manifest'
|
||||
|
||||
" Get the path to the rplugin manifest file.
|
||||
function! s:GetManifestPath() abort
|
||||
let manifest_base = ''
|
||||
|
||||
if exists('$NVIM_RPLUGIN_MANIFEST')
|
||||
return fnamemodify($NVIM_RPLUGIN_MANIFEST, ':p')
|
||||
endif
|
||||
|
||||
let dest = has('win32') ? '$LOCALAPPDATA' : '$XDG_DATA_HOME'
|
||||
if !exists(dest)
|
||||
let dest = has('win32') ? '~/AppData/Local' : '~/.local/share'
|
||||
endif
|
||||
|
||||
let dest = fnamemodify(expand(dest), ':p')
|
||||
if !empty(dest) && !filereadable(dest)
|
||||
let dest .= ('/' ==# dest[-1:] ? '' : '/') . 'nvim'
|
||||
call mkdir(dest, 'p', 0700)
|
||||
let manifest_base = dest
|
||||
endif
|
||||
|
||||
return manifest_base.'/rplugin.vim'
|
||||
endfunction
|
||||
|
||||
" Old manifest file based on known script locations.
|
||||
function! s:GetOldManifestPath() abort
|
||||
let prefix = exists('$MYVIMRC')
|
||||
\ ? $MYVIMRC
|
||||
\ : matchstr(get(split(execute('scriptnames'), '\n'), 0, ''), '\f\+$')
|
||||
return fnamemodify(expand(prefix, 1), ':h')
|
||||
\.'/.'.fnamemodify(prefix, ':t').'-rplugin~'
|
||||
endfunction
|
||||
|
||||
function! s:GetManifest() abort
|
||||
let manifest = s:GetManifestPath()
|
||||
if !filereadable(manifest)
|
||||
" Check if an old manifest file exists and move it to the new location.
|
||||
let old_manifest = s:GetOldManifestPath()
|
||||
if filereadable(old_manifest)
|
||||
call rename(old_manifest, manifest)
|
||||
endif
|
||||
endif
|
||||
return manifest
|
||||
endfunction
|
||||
|
||||
function! s:LoadRemotePlugins() abort
|
||||
let g:loaded_remote_plugins = s:GetManifest()
|
||||
if filereadable(g:loaded_remote_plugins)
|
||||
execute 'source' fnameescape(g:loaded_remote_plugins)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
command! UpdateRemotePlugins call remote#host#UpdateRemotePlugins()
|
||||
|
||||
augroup nvim-rplugin
|
||||
autocmd!
|
||||
autocmd FuncUndefined *
|
||||
\ call remote#host#LoadRemotePluginsEvent(
|
||||
\ 'FuncUndefined', expand('<amatch>'))
|
||||
autocmd CmdUndefined *
|
||||
\ call remote#host#LoadRemotePluginsEvent(
|
||||
\ 'CmdUndefined', expand('<amatch>'))
|
||||
augroup END
|
||||
call s:LoadRemotePlugins()
|
||||
|
||||
Reference in New Issue
Block a user