diff --git a/keymap/vim.js b/keymap/vim.js
index 8a7945ed0849e1aed3f90d10032f43cdf092e6b1..3ed95190b24279c734164fe1f4f62d50d1319390 100644
--- a/keymap/vim.js
+++ b/keymap/vim.js
@@ -2105,7 +2105,7 @@
             selectionStart = Pos(selectionStart.line, selectionEnd.ch);
             cm.setCursor(selectionStart);
             selectBlock(cm, selectionEnd);
-          } else if (selectionEnd.line < selectionStart.line) {
+          } else if (selectionEnd && selectionEnd.line < selectionStart.line) {
             selectionEnd = Pos(selectionStart.line, 0);
             cm.setCursor(selectionEnd);
           }
diff --git a/test/vim_test.js b/test/vim_test.js
index d057b4b3d5f55a37555efe0983d51b6c3994718e..7f016c479b9238535aa48b2e0235132784d59300 100644
--- a/test/vim_test.js
+++ b/test/vim_test.js
@@ -1304,6 +1304,11 @@ testVim('A_visual_block', function(cm, vim, helpers) {
   replacement.pop();
   cm.replaceSelections(replacement);
   eq('testhello\nmehello\npleahellose', cm.getValue());
+  helpers.doKeys('<Esc>');
+  cm.setCursor(0, 0);
+  helpers.doKeys('.');
+  // TODO this doesn't work yet
+  // eq('teshellothello\nme hello hello\nplehelloahellose', cm.getValue());
 }, {value: 'test\nme\nplease'});
 testVim('I', function(cm, vim, helpers) {
   cm.setCursor(0, 4);