我的 .vimrc 被拆分为 vimrc.d 目录中的多个文件,这些文件中包含全局设置、变量和基于特定功能的函数,例如 Diff、Color、Folding 等。runtime
启动时,这些文件通过 .vimrc 包含。但总的来说,这些文件中有很多很少使用的函数,因此最好将它们转换为自动加载函数。
我的问题是:
- 所有内容都很好地打包成功能模块(如 diff.vim),但如果我想将函数转换为自动加载函数,这是否意味着我需要将 vimrc.d 文件拆分为由我的 vimrc 运行时的文件和通过自动加载机制时调用的自动加载文件?
- 或者我应该修改 rtp 以包含我的 vimrc.d 并将函数定义为其中的自动加载函数,如 vimrc.d#diff#functioname?我可以从我的 vimrc 运行这些文件并仍然获得自动加载的好处吗?
谢谢!
答案1
- 是的。虽然我不明白为什么你要在 vimrc 中使用 vimrc.d 目录和 :runtime,而不是直接将文件放入插件目录中并让 Vim 自动执行 :runtime。
- 自动加载的插件通常分为两个文件:一个进入插件目录的接口代码文件和一个进入自动加载目录的执行代码文件。接口代码文件始终被加载,并且应该精简。它通常包含调用执行代码文件中定义的函数的命令和/或宏。执行代码文件只有在它定义的对象(例如函数或变量)被访问且尚未定义时才会被加载。如果您从 vimrc 运行自动加载/执行代码文件,那么您就违背了自动加载文件的目的。
您需要将自动加载的文件放入自动加载目录中,该目录是“runtimepath”组件之一的子目录。如果您不想使用标准 ~/.vimrc/autoload(在 Unix 上)或 ~/vimfiles/autoload(在 Windows 上)目录,则必须确保您的自动加载目录的父目录位于“runtimepath”中。
那么你是否执行以下操作并不重要:
- 按照你之前的做法,将界面代码文件放在你的 vimrc.d 目录中,然后从你的 vimrc 中自行运行它们;
- 将您的 vimrc.d 目录添加到您的“运行时路径”,将界面代码文件移动到新的子目录 vimrc.d/plugin,然后让 Vim 为您运行它们;或者
- 只需将您的界面代码文件放在标准的~/.vim/plugin或~/vimfiles/plugin目录中,并省去vimrc.d和vimrc中的:runtime路径。
如果您确实想将您的资料放在标准位置之外并放在一个目录中,我想您可以这样做(为方便起见假设使用 Unix)。
- 创建两个新目录,~/.vim/vimrc.d/autoload 和 ~/.vim/vimrc.d/plugin。
- 将现有脚本拆分为界面代码和执行代码部分,并将它们放入这些目录中,不要在 ~/.vim/vimrc.d 中留下任何脚本文件。
- 从你的 vimrc 中删除 :runtime。
在你的 vimrc 中,将 ~/.vim/vimrc.d 添加到你的“runtimepath”,如下所示:
set rtp^=~/.vim/vimrc.d
作为参考,自动加载脚本在
:help 41.15
:help autoload-functions