[git commit] vi: stored search pattern applies to ':s'

Denys Vlasenko vda.linux at googlemail.com
Sun Jun 27 11:36:49 UTC 2021


commit: https://git.busybox.net/busybox/commit/?id=5dbbd0a6f52befe6bc57baf97d39168e595197f1
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 editors/vi.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/editors/vi.c b/editors/vi.c
index 38ce1fdf0..f0bbc9518 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);


More information about the busybox-cvs mailing list