Ken Takata wrote: > Hi Benji and list, > > I found a problem that % in Operator pending mode doesn't work properly > when multibyte characters are set in b:match_words. > > E.g. consider setting "(" (U+FF08, FULLWIDTH LEFT PARENTHESIS) and > ")" (U+FF09, FULLWIDTH RIGHT PARENTHESIS) as a pair. > > Step to reproduce: > 1. Execute vim with the following command line > vim -u NONE -N -c 'runtime macros/matchit.vim' -c 'let b:match_words="(:)"' > > 2. Insert the following text > aaa(bbb)ccc > > 3. Move the cursor on (, then type d% > Actual result is: > aaac > > Expected result is: > aaaccc > > > This is caused in s:CleanUp(). Character count should be used instead of > byte count. > > The following patch fixes the problem: > > --- a/runtime/macros/matchit.vim > +++ b/runtime/macros/matchit.vim > @@ -303,7 +303,10 @@ fun! s:CleanUp(options, mode, startline, > let regexp = s:Wholematch(matchline, a:1, currcol-1) > let endcol = matchend(matchline, regexp) > if endcol > currcol " This is NOT off by one! > - execute "normal!" . (endcol - currcol) . "l" > + let charcount = strlen(substitute(matchline[currcol-1 : endcol-1], ".", > "x", "g")) > + if charcount > 1 > + execute "normal!" . (charcount - 1) . "l" > + endif > endif > endif " a:0 > endif " a:mode != "o" && etc. > > > > Note: This patch can be a little bit simple after Vim 7.4.755. > > Before 7.4.755: > let charcount = strlen(substitute(matchline[currcol-1 : endcol-1], ".", "x", > "g")) > After 7.4.755: > let charcount = strchars(matchline[currcol-1 : endcol-1], 1) > > More detail: > https://github.com/vim-jp/vim/blob/v7-4-778/runtime/doc/eval.txt#L5855-5873
Would there be much performance difference when using strchars() ? -- hundred-and-one symptoms of being an internet addict: 254. You wake up daily with your keyboard printed on your forehead. /// 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.
