diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp
index afdb42c4ca3153722b32933ee7850d51042cb1c4..6f11f439de32ea8969548ff9c7465f106ae60ef7 100644
--- a/src/plugins/fakevim/fakevim_test.cpp
+++ b/src/plugins/fakevim/fakevim_test.cpp
@@ -876,11 +876,26 @@ void FakeVimPlugin::test_vim_block_selection()
     KEYS("u", "(abc()" X "())");
     KEYS("<c-r>", "(abc()" X ")");
 
+    data.setText("\"abc" X "\"\"def\"");
+    KEYS("vi\"d", "\"" X "\"\"def\"");
+
     // repeat change inner
     data.setText("(abc)" N "def" N "(ghi)");
     KEYS("ci(xyz<esc>", "(xy" X "z)" N "def" N "(ghi)");
     KEYS("j.", "(xyz)" N "de" X "f" N "(ghi)");
     KEYS("j.", "(xyz)" N "def" N "(xy" X "z)");
+
+    // quoted string
+    data.setText("\"abc" X "\"\"def\"");
+    KEYS("di\"", "\"" X "\"\"def\"");
+    KEYS("u", "\"" X "abc\"\"def\"");
+    KEYS("<c-r>", "\"" X "\"\"def\"");
+
+    NOT_IMPLEMENTED
+    // quoted string with escaped character
+    data.setText("\"abc\"");
+    KEYS("di\"", "\"abc\"\"" X "\"");
+    KEYS("u", "\"abc\"\"" X "def\"");
 }
 
 void FakeVimPlugin::test_vim_repeat()
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index ac0ad4e244b7d46eeed085db69b82b1e2a82d99d..5aa50f4c86afa8bb3f3da1871d9810003f16bb49 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -6868,6 +6868,9 @@ bool FakeVimHandler::Private::selectQuotedStringTextObject(bool inner,
         p2 -= sz - 1;
     }
 
+    if (isVisualMode())
+        --p2;
+
     setAnchorAndPosition(p1, p2);
     m_movetype = MoveExclusive;