diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 7a6f901b4b31a328f9d80ba299f1fc9c89e33d55..eb98ead8fc470295686c5be6d1b30841ad328823 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -954,12 +954,15 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, setDotCommand("%1cc", count()); finishMovement(); } else if (m_submode == DeleteSubMode && key == 'd') { // tested - moveToStartOfLine(); - setTargetColumn(); - setAnchor(); - moveDown(count()); m_movetype = MoveLineWise; + int endPos = firstPositionInLine(lineForPosition(position()) + count() - 1); + Range range(position(), endPos, RangeLineMode); + yankText(range); + removeText(range); setDotCommand("%1dd", count()); + m_submode = NoSubMode; + moveToFirstNonBlankOnLine(); + setTargetColumn(); finishMovement(); } else if (m_submode == YankSubMode && key == 'y') { m_movetype = MoveLineWise; diff --git a/tests/auto/fakevim/main.cpp b/tests/auto/fakevim/main.cpp index fc873e8317fce7503bc9cf29af0efcceb5b96325..9201ba7d5e599a679fb436809a0984ddd05cb647 100644 --- a/tests/auto/fakevim/main.cpp +++ b/tests/auto/fakevim/main.cpp @@ -58,6 +58,7 @@ private slots: // command mode void command_cc(); void command_dd(); + void command_dd_2(); void command_dollar(); void command_down(); void command_dfx_down(); @@ -277,13 +278,23 @@ void tst_FakeVim::command_dd() move("j", "@" + l[1]); check("dd", l[0] + "\n@" + lmid(2)); check(".", l[0] + "\n@" + lmid(3)); - check("3dd", l[0] + "\n@" + lmid(6)); - check("8l", l[0] + "\n QApp@lication app(argc, argv);\n" + lmid(7)); + check("3dd", l[0] + "\n @QApplication app(argc, argv);\n" + lmid(7)); + check("4l", l[0] + "\n QApp@lication app(argc, argv);\n" + lmid(7)); check("dd", l[0] + "\n@" + lmid(7)); - check(".", l[0] + "\n@" + lmid(8)); + check(".", l[0] + "\n @return app.exec();\n" + lmid(9)); check("dd", l[0] + "\n@" + lmid(9)); } +void tst_FakeVim::command_dd_2() +{ + setup(); + move("j", "@" + l[1]); + check("dd", l[0] + "\n@" + lmid(2)); + check("p", l[0] + "\n" + l[2] + "\n@" + l[1] + "\n" + lmid(3)); +return; // FIXME + check("u", l[0] + "\n@" + lmid(2)); +} + void tst_FakeVim::command_dollar() { setup();