diff --git a/src/plugins/fakevim/handler.cpp b/src/plugins/fakevim/handler.cpp
index 9a6a08dd8c3708dfbfa489896fcf7dad6928fd58..839ee1748253bd539911ec6dcd21f04e81291aba 100644
--- a/src/plugins/fakevim/handler.cpp
+++ b/src/plugins/fakevim/handler.cpp
@@ -287,8 +287,7 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
         m_tc.movePosition(Left, KeepAnchor, n);
         finishMovement();
     } else if (key == 'H') {
-        int firstPos = m_editor->cursorForPosition(QPoint(0, 0)).position();
-        m_tc.setPosition(firstPos, KeepAnchor);
+        m_tc = m_editor->cursorForPosition(QPoint(0, 0));
         m_tc.movePosition(Down, KeepAnchor, qMax(count() - 1, 0));
         moveToFirstNonBlankOnLine();
         finishMovement();
@@ -304,12 +303,17 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
         m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist()));
         finishMovement();
     } else if (key == 'L') {
-        QPoint point = m_editor->geometry().bottomRight();
-        int firstPos = m_editor->cursorForPosition(point).position();
-        m_tc.setPosition(firstPos, KeepAnchor);
+        int heigth = m_editor->height();
+        m_tc = m_editor->cursorForPosition(QPoint(0, heigth));
+        m_tc.movePosition(Up, KeepAnchor, qMax(count() - 1, 0));
         m_tc.movePosition(Up, KeepAnchor, qMax(count(), 1));
         moveToFirstNonBlankOnLine();
         finishMovement();
+    } else if (key == 'M') {
+        int heigth = m_editor->height();
+        m_tc = m_editor->cursorForPosition(QPoint(0, heigth / 2));
+        moveToFirstNonBlankOnLine();
+        finishMovement();
     } else if (key == 'n') {
         search(m_lastSearchString, m_lastSearchBackward);
     } else if (key == 'N') {