-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
On May 28, 2014 3:11:51 PM GMT+03:00, Alexey Radkov <[email protected]> wrote: >If a new function is involved then :3match would have explicitly >different >behaviour than other :match commands whereas currently it is not >prohibited >to use :3match for purposes besides matchparen (though it is not >recommended in docs). It means that backward compatibility will be >broken. :3match is an alias to *VimL* matchadd() function. Bram was suggesting to add *VimL* matchaddpos() function. NOT change :3match behavior, but introduce a new VimL function that is better suited for the purposes of matchparen. >This patch tries to guess if :3match was called by matchparen and do >not >break expected behaviour when :3match was called for other purposes. >But i >agree that regexp heuristics looks ugly and is not so fast. Probably >using >a new dedicated command instead :3match will be the best solution: the >new >command would be implemented by the matchaddpos() function. > > >2014-05-28 14:19 GMT+04:00 Bram Moolenaar <[email protected]>: > >> >> 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 -- [email protected] -- 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 [email protected]. >For more options, visit https://groups.google.com/d/optout. -----BEGIN PGP SIGNATURE----- Version: APG v1.1.1 iQI1BAEBCgAfBQJTheZrGBxaeVggPHp5eC52aW1AZ21haWwuY29tPgAKCRCf3UKj HhHSvtL4EACDLvhpafQvMMM5BCZn5hoNgeeps3bAf0lK4TxGOhq/dCl6OmSwapy4 DDuaYf14rZn1m/QGnqOLRP0cx3sHFYSGgdGFHtuDpBepRV3fVD5M72m/GStzwnfl A7OX9gi2P55UdarZQ8RQhfFbBTtzlKCoXpQFIZqpRjxgSBFKyBHJpDxL1cSIC6MN /kKBuaFtP4VADzTb1/FgMKeN6KUJ+QzWAPWZQDWBNX7gK64jQs9KVAbqN4EXBV03 +EDb1GNi5ohXmZ6cTFRqNt0EhzrK7SiwQjh1DqJXvDbyjSIUQlUAVy6qBU9EPZBL yDIVJuKSUhG6AWML2dDVjF4K2e4LhLnpyTW3kjwssR1yDOo9no6Zb5hz3znF2/Qe uDi0rqu53ooWLA7qO5DLZiyns+blDp/Hon140X74Fp4YRatqHXxYcEeWXY3CuKqg /mgL5AJJVw5rB2HH3u/+n7PCnop73XuY0DXi6bnSPpvDaAgqQDZKrMyaVCpnGTmc FEu435+7BC9ctSZwQPSKo16TWS64bYs2DVbw6DRXMuljPHLidwRodDSx+dbeNNb1 VY3/u+GGCZiKo9GxGOGT3QSlk8WUpmP41lXGh6oORgkTQGlKZXXtITjUH/gwY2P8 PZXIYYX6e+emNP9HqgvEXE6VhrjaDepEeZuf/oeTvfyyUYMLFj2V3Q== =uyaE -----END PGP SIGNATURE----- -- -- 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
