Vim、Pathogen和ftplugin文件的加载顺序

6
我已经使用Vim和pathogen一段时间了,一切都很顺利,但最近我的ftplugin配置出现了加载顺序问题。我现在遇到的具体问题是python-mode正在覆盖我的ftplugin设置。我有一个~/.vim/ftplugin/python.vim文件,其中包含以下行:
setlocal textwidth=119

python-mode自带一个ftplugin文件,其中也设置了textwidth,位于~/.vim/bundle/python-mode/ftplugin/python/pymode.vim

问题是Vim现在在我的ftplugin文件之后加载python-mode的ftplugin文件,因此我得到了它的textwidth=79。我最近不得不重新安装MacPorts,我认为在默认配置中必须有一些改变。

我尝试了各种技巧,在调用pathogen之前关闭文件类型/插件检测,根据various other答案,但没有任何帮助。

通过使用verbose set textwidth?和一些echomsg调试,我知道两个ftplugin文件都被调用了,并且它们被以错误的(对于我的需求)顺序调用。

有没有办法强制Vim/pathogen在插件后调用我的ftplugin文件?

我甚至尝试将我的设置放入~/.vim/after/plugin/pymode.vim中,但那是在pathogen设置插件之后立即加载的,因此它仍然在ftplugin文件之前运行,只有当我编辑Python文件时才会加载ftplugin文件。


我通过在~/.vim/after/plugin/pymode.vim中设置let g:pymode_options = 0来解决这个特定问题,因为我不想要python-mode的任何选项,但我仍在寻找更一般的解决方案来解决这个加载顺序问题。 - Jim Stewart
3个回答

8
原来可能我一直以为的方法并不正确。我没有意识到Vim也支持~/.vim/after/ftplugin,所以我将我的覆盖文件移到了~/.vim/after/ftplugin/python.vim,得到了我期望的结果。虽然我不太想在Stack Overflow上回答自己的问题,但希望这能帮助其他人。

2
我认为鼓励回答自己的问题。http://stackoverflow.com/help/self-answer - lsiebert

6

普通的Vim按字母顺序加载插件脚本。这是来自:help load-plugins的说明。

... all directories in the 'runtimepath' option will be
searched for the "plugin" sub-directory and all files ending in ".vim"
will be sourced (in alphabetical order per directory), also in
subdirectories.

所以,您可以通过将<filetype>_plugin.vim重命名为<filetype>/35plugin.vim来设置插件加载顺序。 35是您所需的加载顺序。我认为这也适用于Pathogen,通过重命名bundle内部的插件目录,但我还没有测试过。

它通过重命名bundle内的插件目录与Pathogen兼容 --- 在v7.4中测试通过。(是的,我需要更新。:D)另外,请注意,autoload文件可能会按照不同于其目录名称的顺序加载,这取决于何时调用这些文件中的函数。 - cxw

0
我仍在寻找一个更一般性的解决方案来解决这个加载顺序问题。
据我所知,使用Pathogen实现这个功能并不容易。但是使用NeoBundle就非常简单了。Pathogen非常简洁,没有提供很多灵活性 - 它只做一件事情,并且做得很好。如果你正在寻找可配置性,那么我认为你使用的工具可能不太合适。
编辑:我不太确定ftplugins,但是通常使用Vundle/NeoBundle指定它们的加载顺序。因此,我意识到这可能不是最相关的答案。

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