aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/search.c4
-rw-r--r--src/nvim/testdir/test_search.vim11
2 files changed, 14 insertions, 1 deletions
diff --git a/src/nvim/search.c b/src/nvim/search.c
index 9814822f76..009e8b4e19 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -386,7 +386,7 @@ bool pat_has_uppercase(char_u *pat)
return true;
}
p += l;
- } else if (*p == '\\' && magic_val == MAGIC_ON) {
+ } else if (*p == '\\' && magic_val <= MAGIC_ON) {
if (p[1] == '_' && p[2] != NUL) { // skip "\_X"
p += 3;
} else if (p[1] == '%' && p[2] != NUL) { // skip "\%X"
@@ -399,6 +399,8 @@ bool pat_has_uppercase(char_u *pat)
} else if ((*p == '%' || *p == '_') && magic_val == MAGIC_ALL) {
if (p[1] != NUL) { // skip "_X" and %X
p += 2;
+ } else {
+ p++;
}
} else if (mb_isupper(*p)) {
return true;
diff --git a/src/nvim/testdir/test_search.vim b/src/nvim/testdir/test_search.vim
index 51e7064c94..a9cad3ed44 100644
--- a/src/nvim/testdir/test_search.vim
+++ b/src/nvim/testdir/test_search.vim
@@ -2048,6 +2048,17 @@ func Test_pattern_is_uppercase_smartcase()
call assert_equal(['abc', 'ABC', 'Abc', ''],
\ getline(1, '$'))
+ call setline(1, input)
+ call cursor(1,1)
+ " \Vabc should match everything
+ %s/\Vabc//g
+ call assert_equal(['', '', '', ''], getline(1, '$'))
+
+ call setline(1, input + ['_abc'])
+ " _ matches normally
+ %s/\v_.*//g
+ call assert_equal(['abc', 'ABC', 'Abc', 'abC', ''], getline(1, '$'))
+
set smartcase& ignorecase&
bw!
endfunc