diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 012e95d9e90e934bf938013937eab8aa7b8e1c39..870a7e0fbcf47bdbc3dafd61db4a823c77a60c16 100755
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -514,7 +514,7 @@ bool FakeVimHandler::Private::wantsOverride(QKeyEvent *ev)
     const int mods = ev->modifiers();
     KEY_DEBUG("SHORTCUT OVERRIDE" << key << "  PASSING: " << m_passing);
 
-    if (key == Key_Escape) {
+    if (key == Key_Escape || (mods == Qt::ControlModifier && key == Key_BracketLeft)) {
         // Not sure this feels good. People often hit Esc several times
         if (m_visualMode == NoVisualMode && m_mode == CommandMode)
             return false;
@@ -1631,7 +1631,8 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
 EventResult FakeVimHandler::Private::handleInsertMode(int key, int,
     const QString &text)
 {
-    if (key == Key_Escape || key == 27 || key == control('c')) {
+    if (key == Key_Escape || key == 27 || key == control('c') ||
+			key == 379 /* ^[ */) {
         // start with '1', as one instance was already physically inserted
         // while typing
         QString data = m_lastInsertion;