Alexey Radkov wrote:

> Hi all.
> 
> My home computer is
> 
> Linux 3.14.4-200.fc20.x86_64 x86_64 x86_64 x86_64 GNU/Linux
> 
> running on
> 
> AMD Athlon(tm) 64 X2 Dual Core Processor 5200+
> 
> Relatively old. And matchparen (I use matchparen++ but they do not
> differ a lot) may perform extremely slow in some cases. I found that
> most slow call in the plugin is 3match and tried to increase its
> performance in the attached patch.
> 
> The idea of the patch:
> 
> Functions match_add() and match_delete() redraw whole screen passing
> flag SOME_VALID to redraw_later(). However matchparen does not require
> that all screen must be redrawn: the positions of matching pairs are
> well known and they are passed in the pattern regexp like
> \(\%24l\%31c\)\|\(\%28l\%36c\), so they can be easily retrieved in the
> match_add()/_delete(). Another fact that hints that we are dealing
> with matchparen is id 3 (:3match is mostly solely used for matchparen
> as the vim doc says). Now we can calculate boundaries for redrawing
> area, set wp->w_buffer->b_mod_set and corresponding top and bottom
> lines numbers and finally pass VALID to redraw_later() and it should
> redraw only between the top and the bottom lines.
> 
> The patch works best for specific cases:
> 
> when matching pairs are located on the same line or close lines and
> terminal area is big enough (this shows best difference due to small
> redraw area to the whole terminal area large relation value).
> 
> I am not sure if this patch is clean (especially when using
> wp->w_buffer->b_mod... variables).
> 
> I also attached video that shows how vim compiled with this patch
> (vim.fast) faster than original vim (vim.slow) (there are two sessions
> on the video: the first is slow, the second is fast(er)).

In my opinion this is too tricky.  It depends on the matchparen plugin
to set exactly the pattern that the code will recognize.

Instead of this, it would be much better to add a kind of match that
doesn't work with a pattern but with the line number and column.
Perhaps also the number of characters.  That's much simpler and also
more efficient.

Could be done by adding a matchaddpos() function, similar to matchadd()
but using a position instead of a pattern.

Whether the match position is adjusted for inserted and deleted lines
remains to be decided.  Probably needs to be an option.

-- 
hundred-and-one symptoms of being an internet addict:
215. Your mouse-clicking forearm rivals Popeye's.

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.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 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/d/optout.

Raspunde prin e-mail lui