Christian Brabandt wrote:
> On Fri, September 28, 2012 16:04, Marco Hinz wrote:
> > Hello!
> >
> > A member of #vim has experienced a weird behaviour while Vim
> > scripting. Under certain conditions :echo would only print one line at
> > max. Thus neither 2x echo nor 1x echo containing a \n would work.
> >
> >
> > Conditions:
> >
> > 1) the :echo's are wrapped in an if/endif block
> >
> > 2) the if/endif block is the last statement in a function
> >
> >
> > Here is the corresponding stackoverflow.com thread:
> >
> > http://stackoverflow.com/questions/12621333/vim-visual-key-input-strange-behaviour
>
> Let me summarize the problem:
> In the following case, :echo does not seem to work.
>
> noremap <silent> f :call Test()<cr>
> fun! Test()
> call input("OK? ")
> if 1
> echo "foobar\nfoo"
> endif
> endfun
>
> But it works, if you change the function to:
>
> fun! Test()
> call input("OK? ")
> if 1
> echo "foobar\nfoo"
> endif
> let a = 1
> endfun
>
> The problem is, that did_endif is not correctly reset and a recursive
> call of do_cmdline() changes the global variable did_endif without
> being reset.
>
> Here is a patch:
> diff --git a/src/ex_docmd.c b/src/ex_docmd.c
> --- a/src/ex_docmd.c
> +++ b/src/ex_docmd.c
> @@ -1537,6 +1537,8 @@
> #endif
>
> --call_depth;
> + if (did_endif)
> + did_endif = FALSE;
> return retval;
> }
Good catch. Would it be possible to write a test that fails without the
fix?
--
It doesn't really matter what you are able to do if you don't do it.
(Bram Moolenaar)
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
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