aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/search.c16
-rw-r--r--src/nvim/testdir/Makefile1
-rw-r--r--src/nvim/testdir/test_textobjects.in40
-rw-r--r--src/nvim/testdir/test_textobjects.ok16
-rw-r--r--src/nvim/version.c2
5 files changed, 66 insertions, 9 deletions
diff --git a/src/nvim/search.c b/src/nvim/search.c
index d393ee7d02..2dd0201259 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -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;
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index fe511166f2..dfd83fb27d 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -29,6 +29,7 @@ SCRIPTS := \
test_close_count.out \
test_command_count.out \
test_marks.out \
+ test_textobjects.out \
NEW_TESTS =
diff --git a/src/nvim/testdir/test_textobjects.in b/src/nvim/testdir/test_textobjects.in
new file mode 100644
index 0000000000..d1cdafcd04
--- /dev/null
+++ b/src/nvim/testdir/test_textobjects.in
@@ -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
diff --git a/src/nvim/testdir/test_textobjects.ok b/src/nvim/testdir/test_textobjects.ok
new file mode 100644
index 0000000000..b670c7d816
--- /dev/null
+++ b/src/nvim/testdir/test_textobjects.ok
@@ -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
diff --git a/src/nvim/version.c b/src/nvim/version.c
index f865e13f55..2127efca51 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -626,7 +626,7 @@ static int included_patches[] = {
665,
// 664 NA
// 663 NA
- // 662,
+ 662,
// 661 NA
660,
659,