1
0
forked from aniani/vim

patch 8.2.3110: a pattern that matches the cursor position is complicated

Problem:    A pattern that matches the cursor position is bit complicated.
Solution:   Use a dot to indicate the cursor line and column. (Christian
            Brabandt, closes #8497, closes #8179)
This commit is contained in:
Bram Moolenaar
2021-07-05 20:15:23 +02:00
parent f6d877975b
commit 04db26b360
6 changed files with 183 additions and 6 deletions

View File

@@ -1707,12 +1707,23 @@ nfa_regatom(void)
{
long_u n = 0;
int cmp = c;
int cur = FALSE;
if (c == '<' || c == '>')
c = getchr();
if (no_Magic(c) == '.')
{
cur = TRUE;
c = getchr();
}
while (VIM_ISDIGIT(c))
{
long_u tmp = n * 10 + (c - '0');
long_u tmp;
if (cur)
semsg(_(e_regexp_number_after_dot_pos_search),
no_Magic(c));
tmp = n * 10 + (c - '0');
if (tmp < n)
{
@@ -1729,6 +1740,8 @@ nfa_regatom(void)
if (c == 'l')
{
if (cur)
n = curwin->w_cursor.lnum;
// \%{n}l \%{n}<l \%{n}>l
EMIT(cmp == '<' ? NFA_LNUM_LT :
cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
@@ -1736,11 +1749,26 @@ nfa_regatom(void)
at_start = TRUE;
}
else if (c == 'c')
{
if (cur)
{
n = curwin->w_cursor.col;
n++;
}
// \%{n}c \%{n}<c \%{n}>c
EMIT(cmp == '<' ? NFA_COL_LT :
cmp == '>' ? NFA_COL_GT : NFA_COL);
}
else
{
if (cur)
{
colnr_T vcol = 0;
getvvcol(curwin, &curwin->w_cursor,
NULL, NULL, &vcol);
n = ++vcol;
}
// \%{n}v \%{n}<v \%{n}>v
EMIT(cmp == '<' ? NFA_VCOL_LT :
cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);