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
|
||||
old_end = VIsual;
|
||||
|
||||
/*
|
||||
* Search backwards for unclosed '(', '{', etc..
|
||||
* Put this position in start_pos.
|
||||
* Ignore quotes here.
|
||||
*/
|
||||
// Search backwards for unclosed '(', '{', etc..
|
||||
// Put this position in start_pos.
|
||||
// Ignore quotes here. Keep the "M" flag in 'cpo', as that is what the
|
||||
// user wants.
|
||||
save_cpo = p_cpo;
|
||||
p_cpo = (char_u *)"%";
|
||||
p_cpo = (char_u *)(vim_strchr(p_cpo, CPO_MATCHBSL) != NULL ? "%M" : "%");
|
||||
while (count-- > 0) {
|
||||
if ((pos = findmatch(NULL, what)) == NULL)
|
||||
if ((pos = findmatch(NULL, what)) == NULL) {
|
||||
break;
|
||||
}
|
||||
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;
|
||||
|
||||
|
@@ -29,6 +29,7 @@ SCRIPTS := \
|
||||
test_close_count.out \
|
||||
test_command_count.out \
|
||||
test_marks.out \
|
||||
test_textobjects.out \
|
||||
|
||||
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,
|
||||
// 664 NA
|
||||
// 663 NA
|
||||
// 662,
|
||||
662,
|
||||
// 661 NA
|
||||
660,
|
||||
659,
|
||||
|
Reference in New Issue
Block a user