diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 3603a728bce148787944aa28bd0a8445f65e652f..9f25943705fd5eb431419083a5362fb06874504b 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -1053,7 +1053,12 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         m_opcount = m_mvcount;
         m_mvcount.clear();
         m_submode = DeleteSubMode;
-    } else if ((key == 'd' || key == 'x') && m_visualMode == VisualLineMode) {
+   } else if ((key == 'd' || key == 'x') && m_visualMode == VisualCharMode) { 
+        recordBeginGroup();
+        leaveVisualMode();
+        m_submode = DeleteSubMode;
+        finishMovement();
+   } else if ((key == 'd' || key == 'x') && m_visualMode == VisualLineMode) {
         leaveVisualMode();
         int beginLine = lineForPosition(m_marks['<']);
         int endLine = lineForPosition(m_marks['>']);