пятница, 28 сентября 2012 г., 8:04:05 UTC+4 пользователь Gary Johnson написал:
> I was working on some code that set b:undo_ftplugin, but it didn't
> have any effect when I set a new filetype.  I copied
> $VIMRUNTIME/ftplugin.vim to ~/.vim and instrumented the section that
> is supposed to execute b:undo_ftplugin.
> 
>       func! s:LoadFTPlugin()
>         echo "In s:LoadFTPlugin()" | sleep 2
>         echo "b:undo_ftplugin is" b:undo_ftplugin | sleep 2
You should've put this line after the next one (or, better, remove it as 
absense of the next message will indicate absence of b:undo_ftplugin 
definition). And use ":echom", not ":echo | sleep", then all messages will be 
seen when you do ":messages"
>         if exists("b:undo_ftplugin")
>           echo "b:undo_ftplugin exists" | sleep 2
>           exe b:undo_ftplugin
>           unlet! b:undo_ftplugin b:did_ftplugin
>         endif
> 
> Whenever I open a new file for which Vim can detect the filetype, or
> :edit some file, I always get the following errors.
b:undo_ftplugin is defined in filetype plugins. What else do you expect? When 
opening new file and doing :edit buffer scope is clean and filetype plugins are 
loaded by s:LoadFTPlugin function *after* you test for b:undo_ftplugin. You 
should have used "set filetype=new_filetype" on *existing* buffer to trigger 
desired behavior.

>     Error detected while processing function <SNR>5_LoadFTPlugin:
>     line    2:
>     E121: Undefined variable: b:undo_ftplugin
>     E15: Invalid expression: b:undo_ftplugin | sleep 2
> 
> That is even after I execute
> 
>     :echo b:undo_ftplugin
> 
> and verify that it is set correctly according to the new filetype.
Don't use :edit. It wipes the buffer.

> It seems that b:undo_ftplugin does not exist in the environment in
> which s:LoadFTPlugin() is executed.  Does setting b:undo_ftplugin as
> most current ftplugin scripts do actually do anything?
They do. Use "set filetype=new_filetype".

-- 
You received this message from the "vim_dev" 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

Raspunde prin e-mail lui