vi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) search
If busybox is compiled with FEATURE_VI_REGEX_SEARCH enabled, command ":s/x/y/" searches not only in the current line, but continues search after it. This makes range searches (":1,3s/x/y/") work incorrect. For example file "./test": 1 2 3 $ vi ./test :1,2s/3/e/ gives us: 1 2 e function old new delta char_search 213 241 +28 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
9a2b6dcc2d
commit
836d0a7ee4
15
editors/vi.c
15
editors/vi.c
@ -255,8 +255,8 @@ enum {
|
|||||||
YANKDEL = TRUE,
|
YANKDEL = TRUE,
|
||||||
FORWARD = 1, // code depends on "1" for array index
|
FORWARD = 1, // code depends on "1" for array index
|
||||||
BACK = -1, // code depends on "-1" for array index
|
BACK = -1, // code depends on "-1" for array index
|
||||||
LIMITED = 0, // how much of text[] in char_search
|
LIMITED = 0, // char_search() only current line
|
||||||
FULL = 1, // how much of text[] in char_search
|
FULL = 1, // char_search() to the end/beginning of entire text
|
||||||
|
|
||||||
S_BEFORE_WS = 1, // used in skip_thing() for moving "dot"
|
S_BEFORE_WS = 1, // used in skip_thing() for moving "dot"
|
||||||
S_TO_WS = 2, // used in skip_thing() for moving "dot"
|
S_TO_WS = 2, // used in skip_thing() for moving "dot"
|
||||||
@ -1914,10 +1914,15 @@ static char *char_search(char *p, const char *pat, int dir, int range)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
// assume a LIMITED forward search
|
q = end - 1; // if FULL
|
||||||
q = end - 1;
|
if (range == LIMITED)
|
||||||
if (dir == BACK)
|
q = next_line(p);
|
||||||
|
if (dir == BACK) {
|
||||||
q = text;
|
q = text;
|
||||||
|
if (range == LIMITED)
|
||||||
|
q = prev_line(p);
|
||||||
|
}
|
||||||
|
|
||||||
// RANGE could be negative if we are searching backwards
|
// RANGE could be negative if we are searching backwards
|
||||||
range = q - p;
|
range = q - p;
|
||||||
q = p;
|
q = p;
|
||||||
|
Loading…
Reference in New Issue
Block a user