diff --git a/keymap/vim.js b/keymap/vim.js index 8bf1fe5664877fc92290c63199958017b823a0e7..3d990d1d58d16ab534120abf8ddeb040060d18b4 100644 --- a/keymap/vim.js +++ b/keymap/vim.js @@ -3979,6 +3979,15 @@ var history = cm.doc.history.done; var event = history[history.length - 2]; return event && event.ranges && event.ranges[0].head; + } else if (markName == '.') { + if (cm.doc.history.lastModTime == 0) { + return // If no changes, bail out; don't bother to copy or reverse history array. + } else { + var changeHistory = cm.doc.history.done.filter(function(el){ if (el.changes !== undefined) { return el } }); + changeHistory.reverse(); + var lastEditPos = changeHistory[0].changes[0].to; + } + return lastEditPos; } var mark = vim.marks[markName]; diff --git a/test/vim_test.js b/test/vim_test.js index 9c78685973fc338de369eac3812c695edddcd4e1..18268ee789139815c7fe84e2ca4926862cd2e59c 100644 --- a/test/vim_test.js +++ b/test/vim_test.js @@ -1675,6 +1675,16 @@ testVim('mark\'', function(cm, vim, helpers) { helpers.doKeys('\'', '\''); helpers.assertCursorAt(2, 3); }); +testVim('mark.', function(cm, vim, helpers) { + cm.setCursor(0, 0); + helpers.doKeys('O', 'testing', '<Esc>'); + cm.setCursor(3, 3); + helpers.doKeys('\'', '.'); + helpers.assertCursorAt(0, 0); + cm.setCursor(4, 4); + helpers.doKeys('`', '.'); + helpers.assertCursorAt(0, 6); +}); testVim('jumpToMark_next', function(cm, vim, helpers) { cm.setCursor(2, 2); helpers.doKeys('m', 't');