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

Re: Any limitation of autocmd when the bufdo is processing ?

Expand Messages
  • Ben Fritz
    ... I can reproduce on the Cream build for Windows, even after commenting out the entire contents of the TestFunc function, leaving in the :set commands. The
    Message 1 of 7 , Mar 1, 2010
    • 0 Attachment
      On Feb 26, 1:41 am, winterTTr <winterTTr....@...> wrote:
      >
      > the Code like below( just an example, not the real code ):
      > I am trying to use the "set eventignore+=BufEnter" and "set
      > eventignore-=BufEnter" to prevent the
      > process from running recursively.
      >
      > --------------------------begin-----------------------------------
      > function! TestFunc()
      >     set eventignore+=BufEnter
      >
      >     let bufname = bufname("%")
      >     " move to specific window
      >     2wincmd w
      >     " update buffer
      >     call append( 0 , bufname )
      >     " move back
      >     1wincmd w
      >
      >     set eventignore-=BufEnter
      > endfunction
      >
      > autocmd BufEnter * call TestFunc()
      > --------------------------end--------------------------------------
      >
      > Everything is OK until i do the bufdo command. such as "bufdo s/^/1/"
      > "E474: Invalid argument: eventignore+=BufEnter" message is shown.
      >
      >

      I can reproduce on the "Cream" build for Windows, even after
      commenting out the entire contents of the TestFunc function, leaving
      in the :set commands. The "bufdo" command I used was 'bufdo echo
      expand("%")'.

      VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Feb 3 2010 15:30:41)
      MS-Windows 32-bit GUI version with OLE support
      Included patches: 1-356
      Compiled by digitectNO@...
      Huge version with GUI. Features included (+) or not (-):
      +arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset
      +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist
      +cmdline_info +comments
      +cryptv +cscope +cursorshape +dialog_con_gui +diff +digraphs -dnd -
      ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path
      +find_in_path
      +float +folding -footer +gettext/dyn -hangul_input +iconv/dyn
      +insert_expand +jumplist +keymap +langmap +libcall +linebreak
      +lispindent +listcmds +localmap
      +menu +mksession +modify_fname +mouse +mouseshape +multi_byte_ime/dyn
      +multi_lang +mzscheme/dyn +netbeans_intg +ole -osfiletype +path_extra
      +perl/dyn
      -postscript +printer +profile +python/dyn +quickfix +reltime
      +rightleft +ruby/dyn +scrollbind +signs +smartindent -sniff
      +startuptime +statusline
      -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white +tcl/
      dyn -tgetent -termresponse +textobjects +title +toolbar +user_commands
      +vertsplit
      +virtualedit +visual +visualextra +viminfo +vreplace +wildignore
      +wildmenu +windows +writebackup -xfontset -xim -xterm_save -xpm_w32

      --
      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
    • Antony Scriven
      ... Me too. It looks to me like ei is being set to ,Syntax which is causing do_set() to fail. Maybe event_name2nr() could do with a if (*start == , )
      Message 2 of 7 , Mar 1, 2010
      • 0 Attachment
        On 1 March 2010 14:54, Ben Fritz <fritzophrenic@...> wrote:

        > On Feb 26, 1:41 am, winterTTr <winterTTr....@...> wrote:
        > >
        > > the Code like below( just an example, not the real code ):
        > > I am trying to use the "set eventignore+=BufEnter" and "set
        > > eventignore-=BufEnter" to prevent the
        > > process from running recursively.
        > >
        > > --------------------------begin-----------------------------------
        > > function! TestFunc()
        > > set eventignore+=BufEnter
        > >
        > > let bufname = bufname("%")
        > > " move to specific window
        > > 2wincmd w
        > > " update buffer
        > > call append( 0 , bufname )
        > > " move back
        > > 1wincmd w
        > >
        > > set eventignore-=BufEnter
        > > endfunction
        > >
        > > autocmd BufEnter * call TestFunc()
        > > --------------------------end--------------------------------------
        > >
        > > Everything is OK until i do the bufdo command. such as "bufdo s/^/1/"
        > > "E474: Invalid argument: eventignore+=BufEnter" message is shown.
        > >
        > >
        >
        > I can reproduce on the "Cream" build for Windows, even
        > after commenting out the entire contents of the TestFunc
        > function, leaving in the :set commands. The "bufdo"
        > command I used was 'bufdo echo
        > expand("%")'.

        Me too. It looks to me like 'ei' is being set to ",Syntax"
        which is causing do_set() to fail. Maybe event_name2nr()
        could do with a "if (*start == ',') ++start;" at the
        beginning. Sorry, I don't have a debug version nor can
        I compile to test this out, so I'm afraid this is a bit of
        a guess. --Antony

        --
        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
      • Antony Scriven
        ... ... on a subsequent :set ei+= . I hope that s clearer. --Antony -- You received this message from the vim_dev maillist. Do not top-post! Type your reply
        Message 3 of 7 , Mar 1, 2010
        • 0 Attachment
          I vaguely wrote:

          > [...]
          >
          > Me too. It looks to me like 'ei' is being set to
          > ",Syntax" which is causing do_set() to fail

          ... on a subsequent ":set ei+=".

          I hope that's clearer. --Antony

          --
          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
        • Bram Moolenaar
          ... This patch should fix it: ... *************** *** 7925,7931 **** new_ei = vim_strnsave(p_ei, (int)(STRLEN(p_ei) + STRLEN(what))); if (new_ei != NULL) { !
          Message 4 of 7 , Mar 1, 2010
          • 0 Attachment
            Antony Scriven wrote:

            > I vaguely wrote:
            >
            > > [...]
            > >
            > > Me too. It looks to me like 'ei' is being set to
            > > ",Syntax" which is causing do_set() to fail
            >
            > ... on a subsequent ":set ei+=".
            >
            > I hope that's clearer. --Antony

            This patch should fix it:

            *** ../vim-7.2.377/src/fileio.c 2010-01-19 14:59:14.000000000 +0100
            --- src/fileio.c 2010-03-01 21:01:04.000000000 +0100
            ***************
            *** 7925,7931 ****
            new_ei = vim_strnsave(p_ei, (int)(STRLEN(p_ei) + STRLEN(what)));
            if (new_ei != NULL)
            {
            ! STRCAT(new_ei, what);
            set_string_option_direct((char_u *)"ei", -1, new_ei,
            OPT_FREE, SID_NONE);
            vim_free(new_ei);
            --- 7925,7934 ----
            new_ei = vim_strnsave(p_ei, (int)(STRLEN(p_ei) + STRLEN(what)));
            if (new_ei != NULL)
            {
            ! if (*what == ',' && *p_ei == NUL)
            ! STRCPY(new_ei, what + 1);
            ! else
            ! STRCAT(new_ei, what);
            set_string_option_direct((char_u *)"ei", -1, new_ei,
            OPT_FREE, SID_NONE);
            vim_free(new_ei);


            --
            TALL KNIGHT OF NI: Ni!
            "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

            /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
            /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
            \\\ download, build and distribute -- http://www.A-A-P.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
          • winterTTr
            ... Thanks Bram and everyone. I will try to compile and use the latest version. ... -- You received this message from the vim_dev maillist. Do not top-post!
            Message 5 of 7 , Mar 1, 2010
            • 0 Attachment
              On Tue, Mar 2, 2010 at 4:02 AM, Bram Moolenaar <Bram@moolenaar.net> wrote:

              Antony Scriven wrote:

              > I vaguely wrote:
              >
              >  > [...]
              >  >
              >  > Me too. It looks to me like 'ei' is being set to
              >  > ",Syntax" which is causing do_set() to fail
              >
              > ... on a subsequent ":set ei+=".
              >
              > I hope that's clearer. --Antony

              This patch should fix it:

              *** ../vim-7.2.377/src/fileio.c 2010-01-19 14:59:14.000000000 +0100
              --- src/fileio.c        2010-03-01 21:01:04.000000000 +0100
              ***************
              *** 7925,7931 ****
                     new_ei = vim_strnsave(p_ei, (int)(STRLEN(p_ei) + STRLEN(what)));
                     if (new_ei != NULL)
                     {
              !           STRCAT(new_ei, what);
                         set_string_option_direct((char_u *)"ei", -1, new_ei,
                                                                       OPT_FREE, SID_NONE);
                         vim_free(new_ei);
              --- 7925,7934 ----
                     new_ei = vim_strnsave(p_ei, (int)(STRLEN(p_ei) + STRLEN(what)));
                     if (new_ei != NULL)
                     {
              !           if (*what == ',' && *p_ei == NUL)
              !               STRCPY(new_ei, what + 1);
              !           else
              !               STRCAT(new_ei, what);
                         set_string_option_direct((char_u *)"ei", -1, new_ei,
                                                                       OPT_FREE, SID_NONE);
                         vim_free(new_ei);

              Thanks Bram and everyone.
              I will try to compile and use the latest version.
               


              --
              TALL KNIGHT OF NI: Ni!
                              "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

               /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
              ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
              \\\        download, build and distribute -- http://www.A-A-P.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

              --
              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
            Your message has been successfully submitted and would be delivered to recipients shortly.