如何在目录中获取所有vim文件

38
我已经将我的 .vimrc 文件拆分成几个文件,并将它们放置在 ~/vimfiles/vimrc.d/ 目录下。
目前,我使用每个文件的确切名称在该目录中进行源操作:
source ~/vimfiles/vimrc.d/file1.vim
source ~/vimfiles/vimrc.d/file2.vim
如何循环遍历该目录中的所有文件,以便我只需在我的 .vimrc 中执行此循环:
for file in ~/vimfiles/vimrc.d/*.vim
   source file
enfor
5个回答

45

正如mb14所说,如果您将它们放在~/.vim/plugin中,它们将自动被引用。

但是,如果您想引用vimrc.d目录中的所有文件,可以这样做(需要相对较新的Vim):

for f in split(glob('~/vimfiles/vimrc.d/*.vim'), '\n')
    exe 'source' f
endfor

你可能也会对自动加载机制感兴趣,它在:help 41.15中有描述:如果你定义了很多函数,这可以使启动速度更快,因为函数仅在第一次使用时加载。


28

您可以将文件直接放入插件目录(~/.vim/plugin),它们会被自动加载。


2
注意:该文件的扩展名应为.vim - weshouman

16

mb14给出了最好的答案。你想要自动执行某些任务?那么使用标准的组织结构:在这里使用plugin/子目录。

否则,:runtime 将成为你的好帮手:

:runtime! vimrc.d/*.vim
  • :source 命令的参数不存在时会报错,而 :runtime 命令则会默默地不执行任何操作。
  • :source 命令只能加载一个文件,而 :runtime! 命令可以加载任意数量的文件。
  • :source 命令需要传入绝对路径或相对于当前目录的路径,而 :runtime 命令需要传入相对于 'runtimepath' 选项的路径。只要遵守 Vim 约定,这应该不会成为问题。

1

DrAl的示例对我不起作用,这是我实现它的方法:

for fpath in split(globpath('~/.vimrc.d/', '*.vim'), '\n')
  exe 'source' fpath
endfor

1
下面的代码片段是我在~/.vimrc文件中使用的,用于在~/.vimrc.d/目录及其子目录中调用脚本...
for f in glob('$HOME/.vimrc.d/**/*.vim', 0, 1)
  execute 'source' f
endfor

查看 vim -c ':help glob' 了解有关其他 glob 参数的详细信息。

简而言之

glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])      *glob()*
  • {nosuf} 设置为 False,允许应用 'suffixes' 和 'wildignore' 选项

  • {list} 设置为 True,使 glob 返回一个列表,其中文件名内的换行符得到尊重


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接