From 3e1032783be7ba544218730633c998db1be7ed48 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 28 Jan 2009 18:42:43 +0100
Subject: [PATCH]     Fixes:    fakevim: 'cw' was off by one again

---
 src/plugins/fakevim/fakevimhandler.cpp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 5a30eac3265..e0b41c6418c 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -483,16 +483,18 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
         m_marks['>'] = m_tc.position();
 
     if (m_submode == ChangeSubMode) {
+        if (m_moveType == MoveInclusive)
+            moveRight(); // correction
         if (!dotCommand.isEmpty())
             m_dotCommand = "c" + dotCommand;
         QString text = recordRemoveSelectedText();
-        qDebug() << "CHANGING TO INSERT MODE" << text;
+        //qDebug() << "CHANGING TO INSERT MODE" << text;
         m_registers[m_register] = text;
         m_mode = InsertMode;
         m_submode = NoSubMode;
     } else if (m_submode == DeleteSubMode) {
         if (m_moveType == MoveInclusive)
-            moveRight(); // correct 
+            moveRight(); // correction
         if (!dotCommand.isEmpty())
             m_dotCommand = "d" + dotCommand;
         m_registers[m_register] = recordRemoveSelectedText();
@@ -1090,11 +1092,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
     } else if (key == 'w') {
         // Special case: "cw" and "cW" work the same as "ce" and "cE" if the
         // cursor is on a non-blank.
-        if (m_submode == ChangeSubMode)
+        if (m_submode == ChangeSubMode) {
             moveToWordBoundary(false, true);
-        else
+            m_moveType = MoveInclusive;
+        } else {
             moveToNextWord(false);
-        m_moveType = MoveExclusive;
+            m_moveType = MoveExclusive;
+        }
         finishMovement("w");
     } else if (key == 'W') {
         moveToNextWord(true);
-- 
GitLab