From 08ad934ac4e341c35497497f4d617a514de524a1 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sat, 21 Aug 2021 14:02:43 +0100 Subject: vi: searches in colon commands should wrap The '/' and '?' search commands wrap to the other end of the buffer if the search target isn't found. When searches are used to specify addresses in colon commands they should do the same. (In traditional vi and vim this behaviour is controlled by the 'wrapscan' option. BusyBox vi doesn't have this option and always uses the default behaviour.) function old new delta colon 4033 4077 +44 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 44/0) Total: 44 bytes Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- editors/vi.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'editors') diff --git a/editors/vi.c b/editors/vi.c index 508477954..eee5e0ed2 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -2527,8 +2527,13 @@ static char *get_one_address(char *p, int *result) // get colon addr, if present dir = ((unsigned)BACK << 1) | FULL; } q = char_search(q, last_search_pattern + 1, dir); - if (q == NULL) - return NULL; + if (q == NULL) { + // no match, continue from other end of file + q = char_search(dir > 0 ? text : end - 1, + last_search_pattern + 1, dir); + if (q == NULL) + return NULL; + } new_addr = count_lines(text, q); } # endif -- cgit v1.2.1