diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index db4e001253dd555204f424984dc2f328be2ee166..336059cf71b042601b660f6c0eba423f498f6342 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -2100,9 +2100,6 @@ void FakeVimHandler::Private::init()
 
 void FakeVimHandler::Private::focus()
 {
-    if (g.inFakeVim)
-        return;
-
     enterFakeVim();
 
     stopIncrementalFind();
@@ -2135,6 +2132,8 @@ void FakeVimHandler::Private::enterFakeVim()
     m_cursor = EDITOR(textCursor());
     g.inFakeVim = true;
 
+    removeEventFilter();
+
     updateFirstVisibleLine();
     importSelection();
 
@@ -2186,6 +2185,8 @@ void FakeVimHandler::Private::leaveFakeVim(bool needUpdate)
                 scrollToLine(firstVisibleLine());
             updateScrollOffset();
         }
+
+        installEventFilter();
     }
 
     g.inFakeVim = false;