diff options
-rw-r--r-- | src/nvim/search.c | 4 | ||||
-rw-r--r-- | src/nvim/testdir/test_search.vim | 11 |
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 |