Vim Tips Wiki
Tip 411 Printable Monobook Previous Next

created 2003 · complexity basic · author Charles E. Campbell, Jr. · version 6.0

Plugins have three basic ways of being initialized:

a. Via some variable that the plugin script uses; the initialization here is obvious -- set the desired variables in your vimrc (or use an appropriate autocmd to do so).

b. Via a map or function call. The problem here is that vimrc is sourced prior to plugin sourcing, so the map or function call isn't available yet.

c. Via a command. Like (b), the vimrc is sourced prior to the plugin being sourced, so the command isn't available yet.

Solution 1: put in .vim/after/plugin a file of the same name as the plugin you're initializing. In that file put

Maps         : norm TheInitializationMap
Function call: call TheInitializationFunction()
Command      : TheInitializationCommand

For example, the <HiMtchBrkt.vim> script which supports the highlighting of matching brackets as you move onto a bracket is not on by default. Normally it requires one to type \[i to start it. However, if you'd like to have the script to start enabled, then put

norm \[i

into the file .vim/after/plugin/HiMtchBrkt.vim.

Windows users: Change .vim to _vimfiles and / to \ in the tip above.

Ron1989 (talk) 06:15, July 4, 2014 (UTC) The solution below is tested working on current version of vim(both 7.3 and 7.4).

Solution 2: for users reluctant to separate plugin initialization from file ~/.vimrc, it is also possible to achieve the same goal utilizing the autocmd event VimEnter. Because Event VimEnter is performed after all other startup stuff, commands called with this autocmd will take place after the loading of all plugins. The procedure is as following:

First create a function including all the plugin specific scripts in it. As an example, we initialise plugin tabular and dragvisuals here.

function! g:LoadPluginScript ()
    " Tabularize {{{
    if exists(":Tabularize")
        vnoremap <Leader>t& :Tabularize /&<CR>
        vnoremap <Leader>t| :Tabularize /|<CR>
        vnoremap <Leader>t, :Tabularize /,<CR>
    " }}}
    " dragvisuals {{{
    if exists("*DVB_Drag()")
        vmap <expr> <LEFT>  DVB_Drag('left')
        vmap <expr> <RIGHT> DVB_Drag('right')
        vmap <expr> <DOWN>  DVB_Drag('down')
        vmap <expr> <UP>    DVB_Drag('up')
        vmap <expr> D       DVB_Duplicate()    
    " }}}

After the definition of this function, call it somewhere later in the ~/.vimrc file with an autocmd. And all plugin initialisations that require the plugin to be loaded in the first place will take place accordingly.

augroup plugin_initialize
    autocmd VimEnter * call LoadPluginScript()
    " foo bar


I've successfully used this approach to have SeeTab.vim automatically load by putting in the line:

execute "SeeTab"

in my after\plugin\SeeTab.vim file with the original SeeTab.vim file in plugin\SeeTab.vim.

This works ok while gvim is open, but I get an error message when exiting:

"E254: Cannot allocate color ."

How can I make this error not show up?

If I don't auto-load using the execute line, but instead type in the "SeeTab" command after gvim starts, then the error does not appear when exiting.

I'm using gvim 6.3 on WinXP. I'm also using blockhl.vim if that might be causing any conflicts.