diff --git a/src/vim.js b/src/vim.js index 237858b..693cc02 100644 --- a/src/vim.js +++ b/src/vim.js @@ -2681,11 +2681,9 @@ export function initVim(CM) { var repeat = motionArgs.repeat; var forward = motionArgs.forward === lastSearch.forward; var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1); - cm.moveH(-increment, 'char'); motionArgs.inclusive = forward ? true : false; - var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter); + var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter, offsetCursor(head, 0, -increment)); if (!curEnd) { - cm.moveH(increment, 'char'); return head; } curEnd.ch += increment; diff --git a/test/vim_test.js b/test/vim_test.js index 52a42ca..4cfc65d 100644 --- a/test/vim_test.js +++ b/test/vim_test.js @@ -3871,6 +3871,23 @@ testVim('vFT', function(cm, vim, helpers) { helpers.doKeys('F', '1'); helpers.assertCursorAt(0, 0); }, { value: '1123 123 123'}); +testVim('vf,;', function(cm, vim, helpers) { + helpers.doKeys('0', 'v') + helpers.doKeys('f', '.'); + eq('ab.', cm.getSelection()); + helpers.doKeys(';'); + eq('ab.cd.', cm.getSelection()); + helpers.doKeys(';'); + eq('ab.cd.ef.', cm.getSelection()); + helpers.doKeys(','); + eq('ab.cd.', cm.getSelection()); + helpers.doKeys(';'); + eq('ab.cd.ef.', cm.getSelection()); + helpers.doKeys('2', ','); + eq('ab.', cm.getSelection()); + helpers.doKeys('2', ','); + eq('ab.', cm.getSelection()); +}, { value: 'ab.cd.ef.g'}); testVim('page_motions', function(cm, vim, helpers) { var value = "x".repeat(200).split("").map((_, i)=>i).join("\n"); cm.setValue(value);