Currently vi assumes that the edit buffer ends in a newline. This may not be the case. For example:
$ printf test > test $ vi test <press 'o'> We fix this by inserting a newline to the end during initialization. Signed-off-by: Petja Patjas <pp01415...@gmail.com> --- The first patch didn't apply, sorry about that. I also took this chance to simplify the logic a bit. editors/vi.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/editors/vi.c b/editors/vi.c index 2645afe87..2947c5c1b 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -2315,9 +2315,10 @@ static int init_text_buffer(char *fn) update_filename(fn); rc = file_insert(fn, text, 1); - if (rc < 0) { - // file doesnt exist. Start empty buf with dummy line - char_insert(text, '\n', NO_UNDO); + if (rc <= 0 || *(end - 1) != '\n') { + // file doesn't exist or doesn't end in a newline. + // insert a newline to the end + char_insert(end, '\n', NO_UNDO); } flush_undo_data(); -- 2.40.0 _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox