mirror of
https://github.com/neovim/neovim.git
synced 2025-10-02 16:08:36 +00:00
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:
@@ -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;
|
||||||
|
|
||||||
|
@@ -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 =
|
||||||
|
|
||||||
|
40
src/nvim/testdir/test_textobjects.in
Normal file
40
src/nvim/testdir/test_textobjects.in
Normal 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
|
16
src/nvim/testdir/test_textobjects.ok
Normal file
16
src/nvim/testdir/test_textobjects.ok
Normal 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
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user