mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-03 17:24:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
if exists('g:loaded_remote_plugins')
 | 
						|
  finish
 | 
						|
endif
 | 
						|
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 = stdpath('data')
 | 
						|
  if !empty(dest)
 | 
						|
    if !isdirectory(dest)
 | 
						|
      call mkdir(dest, 'p', 0700)
 | 
						|
    endif
 | 
						|
    let manifest_base = dest
 | 
						|
  endif
 | 
						|
 | 
						|
  return manifest_base.'/rplugin.vim'
 | 
						|
endfunction
 | 
						|
 | 
						|
" Old manifest file based on known script locations.
 | 
						|
function! s:GetOldManifestPaths() abort
 | 
						|
  let prefix = exists('$MYVIMRC')
 | 
						|
        \ ? $MYVIMRC
 | 
						|
        \ : matchstr(get(split(execute('scriptnames'), '\n'), 0, ''), '\f\+$')
 | 
						|
  let origpath = fnamemodify(expand(prefix, 1), ':h')
 | 
						|
        \.'/.'.fnamemodify(prefix, ':t').'-rplugin~'
 | 
						|
  if !has('win32')
 | 
						|
    return [origpath]
 | 
						|
  endif
 | 
						|
  " Windows used to use $APPLOCALDATA/nvim but stdpath('data') is
 | 
						|
  " $XDG_DATA_DIR/nvim-data
 | 
						|
  let pseudostdpath = exists('$LOCALAPPDATA') ? '$LOCALAPPDATA' : '~/AppData/Local'
 | 
						|
  let pseudostdpath = fnamemodify(expand(pseudostdpath), ':p')
 | 
						|
  return [substitute(pseudostdpath, '[/\\]\=$', '/', '') . 'nvim/rplugin.vim', origpath]
 | 
						|
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.
 | 
						|
    for old_manifest in s:GetOldManifestPaths()
 | 
						|
      if filereadable(old_manifest)
 | 
						|
        call rename(old_manifest, manifest)
 | 
						|
        break
 | 
						|
      endif
 | 
						|
    endfor
 | 
						|
  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! -bar UpdateRemotePlugins call remote#host#UpdateRemotePlugins()
 | 
						|
 | 
						|
call s:LoadRemotePlugins()
 |