diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 12ff3c713ccc29814ebde0d188f925f084bf723c..53f3fa26b0230a7e5d797cb6babe7976831fcb33 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -695,7 +695,12 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) else moveToFirstNonBlankOnLine(); } else if (key == 'j' || key == Key_Down) { - m_tc.movePosition(Down, KeepAnchor, count()); + if (m_submode == NoSubMode || m_submode == ZSubMode || m_submode == RegisterSubMode) { + m_tc.movePosition(Down, KeepAnchor, count()); + } else { + m_tc.movePosition(StartOfLine, MoveAnchor); + m_tc.movePosition(Down, KeepAnchor, count()+1); + } finishMovement(); } else if (key == 'J') { EditOperation op; @@ -710,7 +715,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, const QString &text) m_tc.movePosition(Left, MoveAnchor, 1); } } else if (key == 'k' || key == Key_Up) { - m_tc.movePosition(Up, KeepAnchor, count()); + if (m_submode == NoSubMode || m_submode == ZSubMode || m_submode == RegisterSubMode) { + m_tc.movePosition(Up, KeepAnchor, count()); + } else { + m_tc.movePosition(StartOfLine, MoveAnchor); + m_tc.movePosition(Down, MoveAnchor); + m_tc.movePosition(Up, KeepAnchor, count()+1); + } finishMovement(); } else if (key == 'l' || key == Key_Right) { m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()));