是否有一种方法可以编写一个函数来操作vim运行时路径变量?



我在我的vimrc中有这些行:

let basepath=','.'~/.vim/plugged/'
" theme plugins
let &runtimepath.=basepath . 'morhetz/gruvbox'
let &runtimepath.=basepath . 'itchyny/lightline.vim'
let &runtimepath.=basepath . 'edkolev/tmuxline.vim'

是否有一种方法来编写一个函数来封装这种行为?我想更正如下内容:

loadplugin('somebody/plugin.vim')

和这一行的效果是一样的:

let &runtimepath.=basepath . 'somebody/plugin.vim'

对于一般情况,即当您不关心不存在的路径时,您可以简单地执行

exe 'set rtp+='.basepath.a:plugin

对于类似的路径处理,我提出了一个函数,该函数只在路径不存在且存在时才添加路径。

" autoload/lh/path.vim
" Function: lh#path#munge(pathlist, path) {{{3
function! lh#path#munge(pathlist, path) abort
  if type(a:pathlist) == type('str')
    let pathlist = split(a:pathlist, ',')
    return join(lh#path#munge(pathlist, a:path), ',')
  else
    if ! empty(glob(a:path))
      call lh#list#push_if_new(a:pathlist, a:path)
    endif
    return a:pathlist
  endif
endfunction
" autoload/lh/list.vim
" Function: lh#list#push_if_new(list, value) {{{3
function! lh#list#push_if_new(list, value) abort
  if index(a:list, a:value) < 0
    call add (a:list, a:value)
  endif
  return a:list
endfunction

在这里我找到了答案:

function LoadPlugin(plugin)
  let basepath=','.'~/.vim/plugged/'
  let &runtimepath.=basepath . a:plugin
endfunction
"invoke this way
call LoadPlugin('somebody/plugin.vim')

最新更新