diff options
author | Ron Yorston | 2021-08-21 14:02:43 +0100 |
---|---|---|
committer | Denys Vlasenko | 2021-08-22 00:09:57 +0200 |
commit | 08ad934ac4e341c35497497f4d617a514de524a1 (patch) | |
tree | b67d433923e9aa3a18c818c7c23aaca90ee98fcf /editors | |
parent | 4357569fdc7bc482dea0ef0bff57a70e7f06523c (diff) | |
download | busybox-08ad934ac4e341c35497497f4d617a514de524a1.zip busybox-08ad934ac4e341c35497497f4d617a514de524a1.tar.gz |
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 <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors')
-rw-r--r-- | editors/vi.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/editors/vi.c b/editors/vi.c index 5084779..eee5e0e 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 |