Fullquote, because I am CC'ing Bram for comment

On Mi, 24 Mai 2017, Christian Brabandt wrote:

> 
> On Mi, 24 Mai 2017, fREW Schmidt wrote:
> 
> > Yes. "If I replace the contents of /usr/share/vim/vim80/syntax/vb.vim with 
> > `let
> > b:current_syntax = "vb"` everything is fast and, as I would hope, the 
> > support
> > files are not loaded N times per buffer but instead exactly once." 
> 
> Well, I see the problem, although I cannot reproduce it.
> 
> The markdown syntax script sources the html syntax script and that one 
> does include a couple of other syntax scripts, like css.vim, 
> javascript.vim and also vb.vim. However from my testing vb.vim is not 
> guilty alone. If I uncomment vb.vim, the overall loading time only 
> shrinks by 0.2 seconds or so (it needs here a total of around 7 
> seconds). So you would need to disable all other to be included syntax 
> scripts as well (for a test, you could set main_syntax='java').
> 
> However, I think you might have found a bug here. Your ftdetect script 
> does this:
> 
> autocmd BufNew,BufNewFile,BufRead *.md :set filetype=markdown
> 
> The :args command does fill the argument list, calls ex_next() which 
> calls eventually alist_set() and then iterates over the argument list 
> and calls adlist_add(). This will finally call buflist_add() which in 
> turn calls buflist_new(), which triggers the BufNew autocommand, which 
> then triggers the FileType and finally the Syntax autocommands. So in 
> the end, we are iterating over the whole list of arguments and call 
> autocommands, for buffers that are not even going to be displayed next.
> 
> So I wonder, if we can't do a little bit better, similar to how vimgrep 
> sets the eventignore option to prevent at least the expensive FileType 
> autocommand:
> 
> diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
> index 36ee57e8e..e0fbbfb9b 100644
> --- a/src/ex_cmds2.c
> +++ b/src/ex_cmds2.c
> @@ -2757,8 +2757,22 @@ ex_next(exarg_T *eap)
>      {
>         if (*eap->arg != NUL)               /* redefine file list */
>         {
> +           /* do_arglist() could trigger BufNew events, which might
> +            * in turn trigger expensive FileType and Syntax autocommands
> +            * prevent this for now */
> +#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
> +           char_u      *save_ei = au_event_disable(",Filetype");
> +#endif
>             if (do_arglist(eap->arg, AL_SET, 0) == FAIL)
> +           {
> +#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
> +               au_event_restore(save_ei);
> +#endif
>                 return;
> +           }
> +#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
> +               au_event_restore(save_ei);
> +#endif
>             i = 0;
>         }
>         else
> 

I am not sure, if this behaviour is a bug. However after thinking some 
more about it, I am wondering, whether the fact that the BufNew 
autocommand triggers a FileType autocommand is a bug itself, since 
autocommands shouldn't nest (see :h autocmd-nested). But I haven't 
looked into the detail, why the FileType autocommand is triggered. (And 
I have a feeling, that when this behaviour is changed, it might actually 
break a lot of ftdetect scripts.)

Best,
Christian
-- 
Glaube heißt nicht wissen wollen, was wahr ist.
                -- Friedrich Wilhelm Nietzsche (Der Antichrist)

-- 
-- 
You received this message from the "vim_use" 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 because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to