如何将所有 Vim 配置文件包含到某个文件夹中?

如何将所有 Vim 配置文件包含到某个文件夹中?

我想将我的vim目录重新组织成这样:

- dotfiles
  |- vim
  |  |- config
  |  |  |- global
  |  |  |  |- basic.vim
  |  |  |  |...
  |  |  |- plugins
  |  |  |  |- ctrl-p.vim
  |  |  |  |...
  |  |  |- functions
  |  |  |  |...
  |  |  |...
  |  |- bootstrap.vimrc

$HOME/.vimrc

if isdirectory(expand('$HOME/dotfiles/vim'))
  source $HOME/dotfiles/vim/bootstrap.vimrc
endif

我的问题是,如何将所有 Vim 配置文件包含在global、、plugins文件夹中functions

我找到了这样的功能:

function! SourceConfig()
  let file_list = split(globpath('$HOME/dotfiles/vim/', '.vim'), '\n')

  for file in file_list
    execute('source '.file)
  endfor
endfunction

call sourceConfig()

但是我想根据指定的加载文件夹,如何修改func,让它globpath变成一个array或者什么的,像下面这样。

let $path=[global, plugins, functions] // this will be source files in turn.

function! SourceConfig()
  let file_list = split(globpath($path, '.vim'), '\n')

  for file in file_list
    execute('source '.file)
  endfor
endfunction

call sourceConfig()

使用 before/plugin 和 after/plugin?

答案1

由于globpath()采用逗号分隔的目录列表,您可以像这样构建位置(我以重复的原始方式进行此操作,因为您似乎不太精通 Vimscript):

function! sourceConfig()
  let path = $HOME  . '/dotfiles/vim/config/global'
  let path .= ',' . $HOME  . '/dotfiles/vim/config/plugins'
  let path .= ',' . $HOME  . '/dotfiles/vim/config/functions'

然后,可以传递此列表来生成脚本文件列表,然后可以获取该脚本文件(请注意,您的语法是错误的,建议进行正确的转义):

  let file_list = split(globpath(path, '*.vim'), '\n')

  for file in file_list
    execute 'source' fnameescape(file)
  endfor
endfunction

方法批评

你没有提到重组的动机,但我会建议坚持使用默认配置布局,要么是“全部在 .vim 下”,要么是“每个插件单独的捆绑目录”。

例如,您列出的方法不能处理ft插件或者自动加载,我确信您的某些插件具有/将会具有。

相关内容