aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/regexp.c
diff options
context:
space:
mode:
authorAndré Twupack <atwupack@mailbox.org>2014-09-21 01:02:22 +0200
committerAndré Twupack <atwupack@mailbox.org>2014-09-21 01:08:03 +0200
commite1517d4f53ddd4e23bb13acbfdf0f7ff2bfe2309 (patch)
tree0bdfdc25a9a999cf251e5302ed672e50f86da791 /src/nvim/regexp.c
parent0ed9f3ec8338783466b0a6ab2661d9a061a436fa (diff)
downloadrneovim-e1517d4f53ddd4e23bb13acbfdf0f7ff2bfe2309.tar.gz
rneovim-e1517d4f53ddd4e23bb13acbfdf0f7ff2bfe2309.tar.bz2
rneovim-e1517d4f53ddd4e23bb13acbfdf0f7ff2bfe2309.zip
vim-patch:7.4.360
Problem: In a regexp pattern a "$" followed by \v or \V is not seen as the end-of-line. Solution: Handle the situation. (Ozaki Kiichi) https://code.google.com/p/vim/source/detail?r=v7-4-360
Diffstat (limited to 'src/nvim/regexp.c')
-rw-r--r--src/nvim/regexp.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c
index 193c68860d..90da02bb1b 100644
--- a/src/nvim/regexp.c
+++ b/src/nvim/regexp.c
@@ -2790,17 +2790,29 @@ static int peekchr(void)
* either "\|", "\)", "\&", or "\n" */
if (reg_magic >= MAGIC_OFF) {
char_u *p = regparse + 1;
+ bool is_magic_all = (reg_magic == MAGIC_ALL);
- /* ignore \c \C \m and \M after '$' */
+ // ignore \c \C \m \M \v \V and \Z after '$'
while (p[0] == '\\' && (p[1] == 'c' || p[1] == 'C'
- || p[1] == 'm' || p[1] == 'M' || p[1] == 'Z'))
+ || p[1] == 'm' || p[1] == 'M'
+ || p[1] == 'v' || p[1] == 'V'
+ || p[1] == 'Z')) {
+ if (p[1] == 'v') {
+ is_magic_all = true;
+ } else if (p[1] == 'm' || p[1] == 'M' || p[1] == 'V') {
+ is_magic_all = false;
+ }
p += 2;
+ }
if (p[0] == NUL
|| (p[0] == '\\'
&& (p[1] == '|' || p[1] == '&' || p[1] == ')'
|| p[1] == 'n'))
- || reg_magic == MAGIC_ALL)
+ || (is_magic_all
+ && (p[0] == '|' || p[0] == '&' || p[0] == ')'))
+ || reg_magic == MAGIC_ALL) {
curchr = Magic('$');
+ }
}
break;
case '\\':