diff options
author | Ron Yorston | 2021-06-25 19:33:31 +0100 |
---|---|---|
committer | Denys Vlasenko | 2021-06-27 13:36:49 +0200 |
commit | 5dbbd0a6f52befe6bc57baf97d39168e595197f1 (patch) | |
tree | b9a0c98dbcda77c15cfb327c8282643734566305 | |
parent | 0231e344273aafd02097eb71851bc7a078da5400 (diff) | |
download | busybox-5dbbd0a6f52befe6bc57baf97d39168e595197f1.zip busybox-5dbbd0a6f52befe6bc57baf97d39168e595197f1.tar.gz |
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>
-rw-r--r-- | editors/vi.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/editors/vi.c b/editors/vi.c index 38ce1fd..f0bbc95 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -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); |