diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 782333cc9f9956e346831a6a60675b335b255690..9c800a89588007fb48ded4bdb0bd4fed9ae7104a 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -4519,6 +4519,9 @@ EventResult FakeVimHandler::Private::handleInsertOrReplaceMode(const Input &inpu
     else
         handleReplaceMode(input);
 
+    if (!m_textedit && !m_plaintextedit)
+        return EventHandled;
+
     if (!isInsertMode() || m_breakEditBlock
             || position() < m_insertState.pos1 || position() > m_insertState.pos2) {
         commitInsertState();
@@ -6969,7 +6972,7 @@ bool FakeVimHandler::Private::handleInsertInEditor(const Input &input)
                     static_cast<Qt::KeyboardModifiers>(input.modifiers()), input.text());
     setAnchor();
     if (!passEventToEditor(event))
-        return false;
+        return !m_textedit && !m_plaintextedit; // Mark event as handled if it has destroyed editor.
 
     endEditBlock();
 
@@ -6985,6 +6988,8 @@ bool FakeVimHandler::Private::passEventToEditor(QEvent &event)
     EDITOR(setOverwriteMode(false));
     emit q->requestSetBlockSelection(false);
     bool accepted = QApplication::sendEvent(editor(), &event);
+    if (!m_textedit && !m_plaintextedit)
+        return false;
     if (isVisualBlockMode())
         emit q->requestSetBlockSelection(true);
     updateCursorShape();