Bram, 2014/7/10(Thu) 3:21:03 UTC+9 Bram Moolenaar: > Patch 7.4.362 > > Problem: When matchaddpos() uses a length smaller than the number of bytes > > in the (last) character the highlight continues until the end of > > the line. > > Solution: Change condition from equal to larger-or-equal. > > Files: src/screen.c > > > > > > *** ../vim-7.4.361/src/screen.c 2014-07-03 22:54:04.911859458 +0200 > > --- src/screen.c 2014-07-09 20:14:46.611627298 +0200 > > *************** > > *** 3852,3858 **** > > { > > shl->attr_cur = shl->attr; > > } > > ! else if (v == (long)shl->endcol) > > { > > shl->attr_cur = 0; > > next_search_hl(wp, shl, lnum, (colnr_T)v, cur); > > --- 3852,3858 ---- > > { > > shl->attr_cur = shl->attr; > > } > > ! else if (v >= (long)shl->endcol) > > { > > shl->attr_cur = 0; > > next_search_hl(wp, shl, lnum, (colnr_T)v, cur); > > *** ../vim-7.4.361/src/version.c 2014-07-09 19:58:21.115647328 +0200 > > --- src/version.c 2014-07-09 20:20:14.423620635 +0200 > > *************** > > *** 736,737 **** > > --- 736,739 ---- > > { /* Add new patch number below this line */ > > + /**/ > > + 362, > > /**/
After patch 7.4.362, Processing time is slow under certain conditions. That condition is 'set hlsearch' and 'set cursorline'. I've prepared a script file(test603.vim) for verification. "==================================================== function! T() call cursor(1, 1) let t = reltime() for l in range(1, line('$')) call cursor(l, 1) redraw endfor echo reltimestr(reltime(t)) endfunction function! S() let s = [] for l in range(1, line('$')) let s += ['\%' . l . 'l\%(abcde\)'] endfor let @/ = join(s, '\|') endfunction :set hlsearch :set cursorline :call setline(1, repeat(['abcdef'], 100)) :call S() :call T() "==================================================== Exec below. $ vim -N -u test603.vim Exec result: Vim Ver. Elasped time 7.4.131 0.045500 7.4.361 0.046550 7.4.362 1.136427 <-- It is 25 times slower. 7.4.398 1.135489 I think patch 7.4.362 is not enough multi-byte support. I wrote a patch. Vim 7.4.404 with my patch elapsed time is 0.053999! Please check this. PS I will send report at a later date about the phenomenon that underline will remain even after the end of Vim in gnome-terminal, mlterm and xterm. Thank you. -- Best regards, Hirohito Higashi -- -- 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.
diff -r 18fd959b07ef src/screen.c --- a/src/screen.c Wed Aug 13 22:05:54 2014 +0200 +++ b/src/screen.c Fri Aug 15 23:07:22 2014 +0900 @@ -3856,9 +3856,20 @@ && v >= (long)shl->startcol && v < (long)shl->endcol) { + int vlen; + shl->attr_cur = shl->attr; +#ifdef FEAT_MBYTE + if (has_mbyte) + { + int vlen = (*mb_ptr2len)(line + v); + + if (shl->endcol - shl->startcol < vlen) + shl->endcol = shl->startcol + vlen; + } +#endif } - else if (v >= (long)shl->endcol) + else if (v == (long)shl->endcol) { shl->attr_cur = 0; next_search_hl(wp, shl, lnum, (colnr_T)v, cur);