On 19 July 2013, Mike Williams <mike.willi...@globalgraphics.com> wrote: > On 19/07/2013 15:52, Mike Williams wrote: > >On 19/07/2013 12:18, Dimitar DIMITROV wrote: > >>Hi, > >> > >>Did a search on the vim_dev archives but couldn't find anything > >>related to this. Sorry if this is redundant. Basically vim is > >>exponentially slow after 1000000iHello <esc> as mentionned in this > >>link: > >>http://www.galexander.org/vim_sucks.html > > > >A quick run over with a profiler seems to show most of the time is > >being spent in vim_strchr() called from has_format_option(), called > >from internal_format(). If I first do :set paste then it is a lot > >quicker - for 4000iHello<ESC> it goes from 16s down to 1s. [...] > Textwidth. Darn sight quicker with it set to 0, wish I had > remembered that. Another factor of ~2 quicker for my final times, > 16000iHello<ESC> now takes ~4s. [...]
Right, what you're seeing here is Vim backtracking to find a blank to split that N * "Hello" line. Since there is no such blank, you get len("Hello") * N * (N + 1) / 2 failed comparisons, which is exactly the O(N^2) behaviour claimed in the article mentioned above. If you replace your test by, say, "16000iHello <ESC>" (with a space after "Hello"), you get linear behaviour, namely len("Hello") * N failed comparisons. I believe this can be fixed with a counter that means something along the lines of: "this line is longer than &tw, and it has no breaking point for the first X characters". Then X would be updated every time more text is appended to that line. On 19 July 2013, Marc Weber <marco-owe...@gmx.de> wrote: > Let's discuss the use case, first. Is there one ? Yes, there is: you run through that piece of code every time you press "p" to paste text. It hits you particularly hard when you edit files with very long lines. > If not let's forgett about it .. [...] Perhaps we should try to understand the problem before dismissing it as harmless? /lcd -- -- 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 because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.