On 09/07/13 07:55, David Barnett wrote:
Is there any way to detect programmatically from a vim script whether
vim has started loading plugin scripts? It would be useful for plugin
managers etc. to be able to detect what phase of startup their code is
being called from.

Also, would there be any unwanted consequences if vim detected
directories added to &runtimepath after startup and sourced those plugin
scripts, too? For instance:

    == .vim/plugin/x.vim ==
    set rtp+=~/y/plugin/y.vim

never ends up sourcing ~/y/plugin/y.vim. Should it?

No it shouldn't. Remember: ":runtime plugin/*.vim" happens automatically once only, and that is near the end of startup, shortly before the GUIEnter event in gvim, or shortly before the VimEnter event in Console Vim; it is bypassed if you start Vim with --noplugin or with -u NONE, or if before plugins are loaded (e.g. in your vimrc; and preferably in some :if branch) you ":set noloadplugins" (or ":set nolpl" for short, and of course without quotes).

Once Vim has started loading plugins, modifying 'runtimepath' may have an effect on where filetype plugins, syntax scripts, indent scripts, autoload scripts, etc., will be looked for; it is too late to influence the loading of global plugins, since that has already begun and will not be done again in this Vim session.

Also, 'runtimepath' is a list of directories, not of files. If ~/.vim/plugin/x.vim decides that some script should be run from some place not in 'runtimepath', it should ":source" it; or if the script is at some unusual place but still under 'runtimepath' you could use the ":runtime" command: to take a real-world example, you could have the following one-line global plugin:

        == $VIM/vimfiles/plugin/matchit.vim ==
        runtime macros/matchit.vim

-- BTW, for the matchit help it is a little trickier: you could have a symlink $VIM/latest pointing to the latest $VIMRUNTIME (currently vim74a, but not so long ago it was vim73) and create a symlink $VIM/vimfiles/doc/matchit.txt -> ../../latest/macros/matchit.txt -- don't forget to run :helptags on your $VIM/vimfiles/doc

The fact that at line 7, matchit.txt still says "For Vim version 6.3." is not really an error: as $VIMRUNTIME/macros/matchit.vim tells us, that plugin hasn't changed since Vim 6.3.



One possible way (untested, and among others) to know when global plugins are loaded would be to have the following two one-line scripts:

        == ~/.vim/plugin/A.vim ==
        doau PluginStart

        == ~/.vim/after/plugin/zzzzzzzz.vim ==
        doau PluginEnd

(defining two new events). On Windows, replace /.vim/ by /vimfiles/, as usual. Caveat: this particular trick does of course not work on Vim executables compiled with -autocmd


David

Best regards,
Tony.
--
A hard man is good to find.

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to