diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 7085d8dc55572c4919eb91639cd275700dd9dfa9..713c9baaec0c7652ee980b954d22b08edf6d1524 100755 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -817,6 +817,8 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) if (m_movetype == MoveLineWise) m_registers[m_register].rangemode = RangeLineMode; removeSelectedText(); + if (m_movetype == MoveLineWise) + handleStartOfLine(); m_submode = NoSubMode; if (atEndOfLine()) moveLeft(); @@ -2769,7 +2771,21 @@ void FakeVimHandler::Private::removeText(const Range &range) tc.movePosition(StartOfLine, MoveAnchor); tc.setPosition(range.endPos, KeepAnchor); tc.movePosition(EndOfLine, KeepAnchor); - tc.movePosition(Right, KeepAnchor, 1); + // make sure that complete lines are removed + // - also at the beginning and at the end of the document + if (tc.atEnd()) { + tc.setPosition(range.beginPos, MoveAnchor); + tc.movePosition(StartOfLine, MoveAnchor); + if (!tc.atStart()) { + // also remove first line if it is the only one + tc.movePosition(Left, MoveAnchor, 1); + tc.movePosition(EndOfLine, MoveAnchor, 1); + } + tc.setPosition(range.endPos, KeepAnchor); + tc.movePosition(EndOfLine, KeepAnchor); + } else { + tc.movePosition(Right, KeepAnchor, 1); + } fixMarks(range.beginPos, tc.selectionStart() - tc.selectionEnd()); tc.removeSelectedText(); return;