пятница, 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