Loading ...
Sorry, an error occurred while loading the content.

66934Re: :echo is not working under certain conditions

Expand Messages
  • Christian Brabandt
    Oct 23, 2012
      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
    • Show all 4 messages in this topic