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;
 }

regards,
Christian

-- 
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