我已将.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
答案 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
返回一个尊重文件名中换行符的列表