vi: stored search pattern applies to ':s'

The same stored search pattern applies to both search ('/') and
search/replace (':s') operations.

A search/replace operation with an empty "find" string (':s//abc/')
should use the last stored search pattern, if available, and issue an
error message if there is none.

If the "find" string is not empty it should replace the stored search
pattern.

function                                             old     new   delta
colon                                               3952    4024     +72
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 72/0)               Total: 72 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2021-06-25 19:33:31 +01:00 committed by Denys Vlasenko
parent 0231e34427
commit 5dbbd0a6f5

View File

@ -3100,6 +3100,18 @@ static void colon(char *buf)
}
len_R = strlen(R);
if (len_F) { // save "find" as last search pattern
free(last_search_pattern);
last_search_pattern = xstrdup(F - 1);
last_search_pattern[0] = '/';
} else if (last_search_pattern[1] == '\0') {
status_line_bold("No previous search");
goto ret;
} else {
F = last_search_pattern + 1;
len_F = strlen(F);
}
if (e < 0) { // no addr given
q = begin_line(dot); // start with cur line
r = end_line(dot);