diff options
Diffstat (limited to 'editors/vi.c')
-rw-r--r-- | editors/vi.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/editors/vi.c b/editors/vi.c index 51dfc12..1dd0b6f 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -2251,7 +2251,6 @@ static char *get_one_address(char *p, int *addr) // get colon addr, if present int st; char *q; IF_FEATURE_VI_YANKMARK(char c;) - IF_FEATURE_VI_SEARCH(char *pat;) *addr = -1; // assume no addr if (*p == '.') { // the current line @@ -2276,16 +2275,20 @@ static char *get_one_address(char *p, int *addr) // get colon addr, if present #endif #if ENABLE_FEATURE_VI_SEARCH else if (*p == '/') { // a search pattern - q = strchrnul(++p, '/'); - pat = xstrndup(p, q - p); // save copy of pattern + q = strchrnul(p + 1, '/'); + if (p + 1 != q) { + // save copy of new pattern + free(last_search_pattern); + last_search_pattern = xstrndup(p, q - p); + } p = q; if (*p == '/') p++; - q = char_search(dot, pat, (FORWARD << 1) | FULL); + q = char_search(next_line(dot), last_search_pattern + 1, + (FORWARD << 1) | FULL); if (q != NULL) { *addr = count_lines(text, q); } - free(pat); } #endif else if (*p == '$') { // the last line in file |