vi: reset command count when specifying '0' range
Since commit a54450248
(vi: allow the '.' command to have a
repetition count) using '0' to specify a range doesn't work with
a non-zero repeat count, e.g. '1d0'. Users wouldn't normally try
to do that but the '.' command does.
Add a special case in get_motion_char() to handle this.
function old new delta
find_range 737 746 +9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 9/0) Total: 9 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
committed by
Denys Vlasenko
parent
033fa3d5c6
commit
38ae0f3e3e
15
editors/vi.c
15
editors/vi.c
@ -1128,11 +1128,16 @@ static int get_motion_char(void)
|
|||||||
int c, cnt;
|
int c, cnt;
|
||||||
|
|
||||||
c = get_one_char();
|
c = get_one_char();
|
||||||
if (c != '0' && isdigit(c)) {
|
if (isdigit(c)) {
|
||||||
// get any non-zero motion count
|
if (c != '0') {
|
||||||
for (cnt = 0; isdigit(c); c = get_one_char())
|
// get any non-zero motion count
|
||||||
cnt = cnt * 10 + (c - '0');
|
for (cnt = 0; isdigit(c); c = get_one_char())
|
||||||
cmdcnt = (cmdcnt ?: 1) * cnt;
|
cnt = cnt * 10 + (c - '0');
|
||||||
|
cmdcnt = (cmdcnt ?: 1) * cnt;
|
||||||
|
} else {
|
||||||
|
// ensure standalone '0' works
|
||||||
|
cmdcnt = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
|
Reference in New Issue
Block a user