{"log10", 1, 1, f_log10},
#endif
#ifdef FEAT_LUA
- {"luaeval", 1, 2, f_luaeval},
+ {"luaeval", 1, 2, f_luaeval},
#endif
{"map", 2, 2, f_map},
{"maparg", 1, 4, f_maparg},
int type;
{
char_u *str = NULL;
+ long len = 0;
char_u *expr = NULL;
char_u *pat;
regmatch_T regmatch;
li = l->lv_first;
}
else
+ {
expr = str = get_tv_string(&argvars[0]);
+ len = (long)STRLEN(str);
+ }
pat = get_tv_string_buf_chk(&argvars[1], patbuf);
if (pat == NULL)
{
if (start < 0)
start = 0;
- if (start > (long)STRLEN(str))
+ if (start > len)
goto theend;
/* When "count" argument is there ignore matches before "start",
* otherwise skip part of the string. Differs when pattern is "^"
if (argvars[3].v_type != VAR_UNKNOWN)
startcol = start;
else
+ {
str += start;
+ len -= start;
+ }
}
if (argvars[3].v_type != VAR_UNKNOWN)
#else
startcol = (colnr_T)(regmatch.startp[0] + 1 - str);
#endif
+ if (startcol > (colnr_T)len
+ || str + startcol <= regmatch.startp[0])
+ {
+ match = FALSE;
+ break;
+ }
}
}
Also test match() and matchstr()
+Also test the gn command and repeating it.
+
STARTTEST
:so small.vim
/^start:/
:put =matchstr(\"abcd\", \".\", 0, -1) " a
:put =match(\"abcd\", \".\", 0, 5) " -1
:put =match(\"abcd\", \".\", 0, -1) " 0
+:put =match('abc', '.', 0, 1) " 0
+:put =match('abc', '.', 0, 2) " 1
+:put =match('abc', '.', 0, 3) " 2
+:put =match('abc', '.', 0, 4) " -1
+:put =match('abc', '.', 1, 1) " 1
+:put =match('abc', '.', 2, 1) " 2
+:put =match('abc', '.', 3, 1) " -1
+:put =match('abc', '$', 0, 1) " 3
+:put =match('abc', '$', 0, 2) " -1
+:put =match('abc', '$', 1, 1) " 3
+:put =match('abc', '$', 2, 1) " 3
+:put =match('abc', '$', 3, 1) " 3
+:put =match('abc', '$', 4, 1) " -1
+:put =match('abc', '\zs', 0, 1) " 0
+:put =match('abc', '\zs', 0, 2) " 1
+:put =match('abc', '\zs', 0, 3) " 2
+:put =match('abc', '\zs', 0, 4) " 3
+:put =match('abc', '\zs', 0, 5) " -1
+:put =match('abc', '\zs', 1, 1) " 1
+:put =match('abc', '\zs', 2, 1) " 2
+:put =match('abc', '\zs', 3, 1) " 3
+:put =match('abc', '\zs', 4, 1) " -1
/^foobar
gncsearchmatch\e/one\_s*two\_s
:1
:" Make sure there is no other match y uppercase.
/\16x59
gggnd
+:" test repeating dgn
+/^Johnny
+ggdgn.
+:" test repeating gUgn
+/^Depp
+gggUgn.
:/^start:/,/^end:/wq! test.out
ENDTEST
Y
text
Y
+--1
+Johnny
+--2
+Johnny
+--3
+Depp
+--4
+Depp
+--5
end: