VIM:每个module.vim和慢启动的动态运行时路径

时间:2011-02-13 13:16:21

标签: vim

我在Debian上使用VIM 7.1。我有9个插件,我通过pathogen.vim加载。加载大约需要8秒,这非常慢,因为这是非GUI / xterm模式。我运行了vim -V,它显示正在多个目录中搜索每个模块。

最初,ftoff.vim,debian.vim和其他“系统”相关的.vim文件在〜/ .vim /中搜索,然后在/ usr / share / vim / vim71 /中搜索 - 我通过移动我的方法来解决这个问题。 vimrc到.vim / vimrc和:导出VIM = / root / .vim,在.vimrc中我做了一个set runtimepath = / usr / share / vim / vim71

但是现在,当模块加载时,它们会改变这个运行时路径,当病原体加载时,它会变得更糟。有没有办法为dirPath指定module-name的哈希值,以避免这种容易出错的查找?或者在vimrc中基于每个模块手动指定runtimepath的方法?

这是病原体加载我的模块后我的运行路径的一个例子。显然,任何进一步的模块加载都会在找到正确的路径之前搜索所有这些路径名。

runtimepath =〜/的.vim〜/的.vim /束/ Align294〜/的.vim /束/ minibufexpl.vim _-_ Elegant_buffer_explorer〜/的.vim /蒲式耳 ndle / The_NERD_Commenter〜/的.vim /束/ The_NERD_tree〜/的.vim /束/病原体,〜/的.vim /束/ VIM-插件-MW-utils的, /.vim/bundle/tlib,~/.vim/bundle/snipMate,~/.vim/bundle/SuperTab,~/.vim/bundle/surround,~/.vim/bundle/taglist 〜/的.vim /束/ Align294〜/的.vim /束/ minibufexpl.vim _-_ Elegant_buffer_explorer〜/的.vim /束/病原体,〜/ vim的 捆绑/ snipMate〜/的.vim /束/ SUPERTAB〜/的.vim /捆扎/环绕,〜/的.vim /束/标记表,〜/的.vim /束/ The_NERD_C mmenter〜/的.vim /束/ The_NERD_tree〜/的.vim /束/ tlib〜/的.vim /束/ VIM-插件管理器,〜/的.vim /束/ VIM-添加 正经理知的储存库,〜/的.vim /束/ VIM-插件-MW-utils的,在/ var / lib中/ VIM /插件,在/ usr /共享/ VIM / vimfiles,/ U R /共享/ VIM / vim71,在/ usr /共享/ VIM / vimfiles /后,在/ var / lib中/ VIM /插件/后,〜/的.vim /束/ snipMate /后,〜/ .vi的 /after,~/.vim/bundle/snipMate/after

3 个答案:

答案 0 :(得分:2)

我使用vim-addon-manager并且在rtp中有33个路径,但是启动并且紧接着关闭vim需要大约0.7-0.8秒(使用vim -c 'qa!'),所以问题是其中一个插件或您的系统。要检查加载每个插件所需的时间,请尝试以下脚本:

vim --cmd 'profile start profile.log' \
    --cmd 'profile func *' \
    --cmd 'profile file *' \
    -c 'profdel func *' \
    -c 'profdel file *' \
    -c 'qa!'

您将获得profile.log中的所有时间。具有功能计时的表将是 出现在文件末尾,要获得每个脚本的时间,请使用以下内容 脚本:

" Open profile.log file in vim first
let timings=[]
g/^SCRIPT/call add(timings, [getline('.')[len('SCRIPT  '):], matchstr(getline(line('.')+1), '^Sourced \zs\d\+')]+map(getline(line('.')+2, line('.')+3), 'matchstr(v:val, ''\d\+\.\d\+$'')'))
enew
call setline('.', ['count total (s)   self (s)  script']+map(copy(timings), 'printf("%5u %9s   %8s  %s", v:val[1], v:val[2], v:val[3], v:val[0])'))

这将打开一个新文件,其中包含与结尾相同的表 profile.log,但1)用于脚本,不用于函数,2)未排序。

如果您的系统有问题,可以尝试以下方法:

  1. 当计算机启动时创建一个ram磁盘并将其挂载到〜/ .vim,然后复制所有插件。
  2. 尝试将插件合并到一个文件中,请参阅:h scriptmanager2#MergePluginFiles()(必须激活vim-addon-manager)
  3. 升级计算机
  4. 尝试在〜/ .vim中创建所有插件的硬链接:

    cd ~/.vim/bundle;for d in *;do cd "$d";for f in **/*.vim;do t="$HOME/.vim/$(dirname "$f")";test -d "$t"||mkdir -p "$t";ln "$f" "$t";done;cd ..;done
    

答案 1 :(得分:2)

它可能没有关系,但对我来说,变量DISPLAY在启动vim所需的时间上有很大的不同(即使我没有gui编译vim)。 试试

DISPLAY= vim

DISPLAY=:0 vim

看看你是否注意到了差异。

答案 2 :(得分:0)

http://pastebin.com/R6E4czN7

我已将vim -V的输出粘贴到pastebin(应该有效期为1个月)。这是自我解释的。有大量搜索(414条搜索线 - 其中大多数都没用)。我需要减少不正确的搜索次数。

1297651453.71068:搜索“/root/.vim/bundle/pathogen/autoload/scriptmanager.vim"[J 1297651453.71456:搜索“/root/.vim/bundle/snipMate/autoload/scriptmanager.vim"[J 1297651453.71846:搜索“/root/.vim/bundle/SuperTab/autoload/scriptmanager.vim"[J 1297651453.78737:搜索“/root/.vim/bundle/surround/autoload/scriptmanager.vim"[J 1297651453.79179:搜索“/root/.vim/bundle/taglist/autoload/scriptmanager.vim"[J 1297651453.79684:搜索“/root/.vim/bundle/The_NERD_Commenter/autoload/scriptmanager.vim"[J 1297651453.80756:搜索“/root/.vim/bundle/The_NERD_tree/autoload/scriptmanager.vim"[J 1297651453.83:搜索“/root/.vim/bundle/tlib/autoload/scriptmanager.vim"[J 1297651453.86193:搜索“/root/.vim/bundle/vim-addon-manager/autoload/scriptmanager.vim"[J 1297651453.8662:第3行:采购“/root/.vim/bundle/vim-addon-manager/autoload/scriptmanager.vim"[J 1297651453.88259:完成采购/root/.vim/bundle/vim-addon-manager/autoload/scriptmanager.vim [J