diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-03-30 09:03:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-30 09:03:57 +0800 |
commit | 75ff156d9b11f23f6156cd6b90fb7bad0a83fd18 (patch) | |
tree | 83c17c86a4bff3b4a703f274202eb59a8b9e3c4d /src/nvim/regexp_bt.c | |
parent | e5428d10b5a49e9395190482ff35bbac0c1117ea (diff) | |
parent | 465f8ff8cbd3f9b73c1de8823505ee6a804b2bf1 (diff) | |
download | rneovim-75ff156d9b11f23f6156cd6b90fb7bad0a83fd18.tar.gz rneovim-75ff156d9b11f23f6156cd6b90fb7bad0a83fd18.tar.bz2 rneovim-75ff156d9b11f23f6156cd6b90fb7bad0a83fd18.zip |
Merge pull request #17773 from zeertzjq/vim-8.2.3110
vim-patch:8.2.{3110,4592}: a pattern that matches the cursor position is complicated
Diffstat (limited to 'src/nvim/regexp_bt.c')
-rw-r--r-- | src/nvim/regexp_bt.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/nvim/regexp_bt.c b/src/nvim/regexp_bt.c index 3835a2bbae..7d0b9a7a77 100644 --- a/src/nvim/regexp_bt.c +++ b/src/nvim/regexp_bt.c @@ -1578,14 +1578,19 @@ static char_u *regatom(int *flagp) } default: - if (ascii_isdigit(c) || c == '<' || c == '>' - || c == '\'') { + if (ascii_isdigit(c) || c == '<' || c == '>' || c == '\'' || c == '.') { uint32_t n = 0; int cmp; + bool cur = false; cmp = c; - if (cmp == '<' || cmp == '>') + if (cmp == '<' || cmp == '>') { c = getchr(); + } + if (no_Magic(c) == '.') { + cur = true; + c = getchr(); + } while (ascii_isdigit(c)) { n = n * 10 + (uint32_t)(c - '0'); c = getchr(); @@ -1602,14 +1607,31 @@ static char_u *regatom(int *flagp) } break; } else if (c == 'l' || c == 'c' || c == 'v') { + if (cur && n) { + semsg(_(e_regexp_number_after_dot_pos_search), no_Magic(c)); + rc_did_emsg = true; + return NULL; + } if (c == 'l') { + if (cur) { + n = curwin->w_cursor.lnum; + } ret = regnode(RE_LNUM); if (save_prev_at_start) { at_start = true; } } else if (c == 'c') { + if (cur) { + n = curwin->w_cursor.col; + n++; + } ret = regnode(RE_COL); } else { + if (cur) { + colnr_T vcol = 0; + getvvcol(curwin, &curwin->w_cursor, NULL, NULL, &vcol); + n = ++vcol; + } ret = regnode(RE_VCOL); } if (ret == JUST_CALC_SIZE) { |