diff --git a/src/actions/actions.ts b/src/actions/actions.ts index 0e4be2b067b..4d8f66c0092 100644 --- a/src/actions/actions.ts +++ b/src/actions/actions.ts @@ -590,13 +590,15 @@ class CommandInsertInInsertMode extends BaseCommand { if (char === "") { if (position.character === 0) { if (position.line > 0) { + const prevEndOfLine = position.getPreviousLineBegin().getLineEnd(); + await TextEditor.delete(new vscode.Range( position.getPreviousLineBegin().getLineEnd(), position.getLineBegin() )); - vimState.cursorPosition = position.getPreviousLineBegin().getLineEnd(); - vimState.cursorStartPosition = position.getPreviousLineBegin().getLineEnd(); + vimState.cursorPosition = prevEndOfLine; + vimState.cursorStartPosition = prevEndOfLine; } } else { let leftPosition = position.getLeft(); diff --git a/test/mode/modeInsert.test.ts b/test/mode/modeInsert.test.ts index 3705acdb06d..b50f27abf33 100644 --- a/test/mode/modeInsert.test.ts +++ b/test/mode/modeInsert.test.ts @@ -126,4 +126,17 @@ suite("Mode Insert", () => { assertEqualLines(["text "]); }); + + test("Correctly places the cursor after deleting the previous line break", async() => { + await modeHandler.handleMultipleKeyEvents([ + 'i', + 'o', 'n', 'e', '\n', 't', 'w', 'o', + '', '', '', + '' + ]); + + assertEqualLines(["onetwo"]); + + assertEqual(TextEditor.getSelection().start.character, 3, " moved cursor to correct position"); + }); });