diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 6b65250b4b2a2f05ced6f5b107c029e439d52698..f52b8aa4610fa2b00616953d66a5de7186e4edcb 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -1165,7 +1165,17 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
 {
     EventResult handled = EventHandled;
 
-    if (m_subsubmode == FtSubSubMode) {
+    if (key == Key_Escape || key == control(Key_BracketLeft)) {
+        if (isVisualMode()) {
+            leaveVisualMode();
+        } else if (m_submode != NoSubMode) {
+            m_submode = NoSubMode;
+            m_subsubmode = NoSubSubMode;
+            finishMovement();
+        } else {
+            resetCommandMode();
+        }
+    } else if (m_subsubmode == FtSubSubMode) {
         m_semicolonType = m_subsubdata;
         m_semicolonKey = key;
         bool valid = handleFfTt(key);
@@ -1963,16 +1973,6 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
 
     } else if (key == control(Key_BracketRight)) {
         handleExCommand("tag");
-    } else if (key == Key_Escape || key == control(Key_BracketLeft)) {
-        if (isVisualMode()) {
-            leaveVisualMode();
-        } else if (m_submode != NoSubMode) {
-            m_submode = NoSubMode;
-            m_subsubmode = NoSubSubMode;
-            finishMovement();
-        } else {
-            resetCommandMode();
-        }
     } else {
         //qDebug() << "IGNORED IN COMMAND MODE: " << key << text
         //    << " VISUAL: " << m_visualMode;