插件是由vimrc加载还是之后加载?

3

我对Vim加载插件文件的顺序感到困惑,在网上找到了一些混乱的答案。有些答案表明vimrc在插件之前被加载,而其他答案则表明它们在vimrc源代码期间被加载,在filetype plugin indent on行。请问有人可以澄清vimrc、插件和after/目录中的插件加载顺序,每个加载原因以及何时可以在vim会话期间重新加载每个内容(例如再次源代码vimrc时会发生什么,设置文件类型时会发生什么等)?


如果有疑问,您总是可以在这里添加一些 :echomsg "我在这里!" 和在那里添加 :echomsg "我在那里!" - Luc Hermitte
3个回答

10
一些答案表明vimrc在插件之前加载,而另一些答案表明它们在vimrc源代码期间加载,在filetype plugin indent on行。 除非手动源代码,否则所有插件都会在您的vimrc后依次被加载。filetype plugin indent on行不会改变这个顺序。
假设您的vimrc中有filetype plugin indent on:
1. 系统vimrc(如果有)。 2. 您的vimrc。 3. 内置插件。 4. 您的插件。 5. 内置文件类型特定插件。 6. after/目录下的内容。
整个过程在:help startup中得到解释,并且可以使用:scriptnames命令清晰地看到。
加载原因取决于&runtimepath的值以及filetype-specific stuff的:filetype命令。
可以通过:source $MYVIMRC重新执行vimrc中的每个命令。大多数插件都以防止它们被重复源代码的方式编写。如果要重置它们,请阅读其文档/代码。可以使用:help :filetype。

帮助文档描述了 filetype plugin onfiletype indent on 作为加载文件的命令。它们与源代码有何区别? - Kvass
1
你刚刚发现文档中存在一个差异。不幸的是,这不是唯一的一个。 - romainl

4

.vimrc文件在加载插件之前执行:

启动时,Vim会检查环境变量和文件,并设置相应的值。Vim按照以下顺序进行:

(...)

  1. 从环境变量和/或文件执行Ex命令。 环境变量被读取为一个Ex命令行,其中多个命令必须用'|'或''隔开。 vimrc exrc 包含初始化命令的文件称为“vimrc”文件。 vimrc文件中的每一行都将作为一个Ex命令行执行。

(...)

  1. 加载插件脚本。

你能解释一下那个filetype行的作用吗?我在问题中提供的答案说它会加载ftplugin和indent文件。这是错误的吗?请详细阐述这个答案以更全面地回答我的问题,然后我再接受。 - Kvass
1
你的问题比较宽泛。为什么不阅读:help filetype以了解更多关于该命令的信息呢? - Meninx - メネンックス
我确实阅读了帮助文档,以及其他关于该主题的堆栈溢出答案和博客文章。但是我仍然感到困惑:/ 如果我的问题似乎太宽泛,也许我可以澄清一下我的困惑所在? - Kvass

0

只需使用:scriptnames即可查看所有源文件及其在启动期间加载的顺序。


这并不能告诉我们插件是在加载 .vimrc 文件时(也就是在 .vimrc 被引用时)还是之后被加载的。 - Luc Hermitte

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