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

时间:2010-12-21 15:17:36

标签: vim

我已将.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 个答案:

答案 0 :(得分:37)

正如mb14已经说过的那样,如果你将它们放在~/.vim/plugin中,它们将自动获取。但是,有关信息,如果要获取vimrc.d目录中的所有文件,则可以执行此操作(需要相对较新的Vim):

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

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

答案 1 :(得分:22)

您可以将文件放在插件目录(〜/ .vim / plugin)中。它们将自动加载。

答案 2 :(得分:13)

mb14给了你最好的答案。你想要自动执行什么?然后使用标准组织:这里是插件/子目录。

否则,:runtime本来就是你的朋友:

:runtime! vimrc.d/*.vim
  • :source在其参数不存在时咆哮,而:runtime默默无源。
  • :source只能提供一个文件,而:runtime!可以提供任意数量的文件。
  • :source采用绝对路径名或相对于当前目录的路径名,而:runtime采用相对于'runtimepath'选项的路径名,这应该不是问题,只要你尊重vim约定。

答案 3 :(得分:1)

DrAl的例子对我不起作用,这就是我实现它的方式:

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

答案 4 :(得分:0)

以下代码片段是我在 ~/.vimrc 文件中用于在 ~/.vimrc.d/ 目录 中获取脚本的内容> 子目录...

for f in glob('$HOME/.vimrc.d/**/*.vim', 0, 1)
  execute 'source' f
endfor

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

TLDR

glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])      *glob()*
  • {nosuf} 设置为 False 允许应用“后缀”和“通配符”选项

  • {list} 设置为 True 会导致 glob 返回一个尊重文件名中换行符的列表