vim-patch:7.4.662

Problem:    When 'M' is in the 'cpo' option then selecting a text object in
            parenthesis does not work correctly.
Solution:   Keep 'M' in 'cpo' when finding a match. (Hirohito Higashi)

438b64ab71
This commit is contained in:
watiko
2016-02-03 06:53:43 +09:00
parent 4f4b8ea448
commit 924cacd2fc
5 changed files with 66 additions and 9 deletions

View File

@@ -3076,18 +3076,18 @@ current_block (
} else } else
old_end = VIsual; old_end = VIsual;
/* // Search backwards for unclosed '(', '{', etc..
* Search backwards for unclosed '(', '{', etc.. // Put this position in start_pos.
* Put this position in start_pos. // Ignore quotes here. Keep the "M" flag in 'cpo', as that is what the
* Ignore quotes here. // user wants.
*/
save_cpo = p_cpo; save_cpo = p_cpo;
p_cpo = (char_u *)"%"; p_cpo = (char_u *)(vim_strchr(p_cpo, CPO_MATCHBSL) != NULL ? "%M" : "%");
while (count-- > 0) { while (count-- > 0) {
if ((pos = findmatch(NULL, what)) == NULL) if ((pos = findmatch(NULL, what)) == NULL) {
break; break;
}
curwin->w_cursor = *pos; curwin->w_cursor = *pos;
start_pos = *pos; /* the findmatch for end_pos will overwrite *pos */ start_pos = *pos; // the findmatch for end_pos will overwrite *pos
} }
p_cpo = save_cpo; p_cpo = save_cpo;

View File

@@ -29,6 +29,7 @@ SCRIPTS := \
test_close_count.out \ test_close_count.out \
test_command_count.out \ test_command_count.out \
test_marks.out \ test_marks.out \
test_textobjects.out \
NEW_TESTS = NEW_TESTS =

View File

@@ -0,0 +1,40 @@
Tests for text-objects vim: set ft=vim :
STARTTEST
:so small.vim
:if !has('textobjects') | e! test.ok | wq! test.out | endif
:set nocompatible
:"
:function SelectionOut(data)
: new
: call setline(1, a:data)
: call setreg('"', '')
: normal! ggfrmavi)y
: $put =getreg('\"')
: call setreg('"', '')
: normal! `afbmavi)y
: $put =getreg('\"')
: call setreg('"', '')
: normal! `afgmavi)y
: $put =getreg('\"')
: %yank a
: q!
: $put =getreg('a')
:endfunction
:"
:$put ='# Test for vi) without cpo-M'
:set cpo-=M
:call SelectionOut('(red \(blue) green)')
:"
:$put ='# Test for vi) with cpo-M #1'
:set cpo+=M
:call SelectionOut('(red \(blue) green)')
:"
:$put ='# Test for vi) with cpo-M #2'
:set cpo+=M
:call SelectionOut('(red (blue\) green)')
:/^Results/,$w test.out
:qa!
ENDTEST
Results of text-objects

View File

@@ -0,0 +1,16 @@
Results of text-objects
# Test for vi) without cpo-M
(red \(blue) green)
red \(blue
red \(blue
# Test for vi) with cpo-M #1
(red \(blue) green)
red \(blue) green
blue
red \(blue) green
# Test for vi) with cpo-M #2
(red (blue\) green)
red (blue\) green
blue\
red (blue\) green

View File

@@ -626,7 +626,7 @@ static int included_patches[] = {
665, 665,
// 664 NA // 664 NA
// 663 NA // 663 NA
// 662, 662,
// 661 NA // 661 NA
660, 660,
659, 659,