diff --git a/src/actions/motion.ts b/src/actions/motion.ts index 5625f09f616..ca96602cede 100644 --- a/src/actions/motion.ts +++ b/src/actions/motion.ts @@ -565,6 +565,9 @@ class MoveFindForward extends BaseMovement { const toFind = Notation.ToControlCharacter(this.keysPressed[1]); let result = position.findForwards(toFind, count); + vimState.lastSemicolonRepeatableMovement = new MoveFindForward(this.keysPressed, true); + vimState.lastCommaRepeatableMovement = new MoveFindBackward(this.keysPressed, true); + if (!result) { return { start: position, stop: position, failed: true }; } @@ -573,14 +576,6 @@ class MoveFindForward extends BaseMovement { result = result.getRight(); } - if ( - !this.isRepeat && - (!vimState.recordedState.operator || !(isIMovement(result) && result.failed)) - ) { - vimState.lastSemicolonRepeatableMovement = new MoveFindForward(this.keysPressed, true); - vimState.lastCommaRepeatableMovement = new MoveFindBackward(this.keysPressed, true); - } - return result; } } @@ -606,18 +601,13 @@ class MoveFindBackward extends BaseMovement { const toFind = Notation.ToControlCharacter(this.keysPressed[1]); let result = position.findBackwards(toFind, count); + vimState.lastSemicolonRepeatableMovement = new MoveFindBackward(this.keysPressed, true); + vimState.lastCommaRepeatableMovement = new MoveFindForward(this.keysPressed, true); + if (!result) { return { start: position, stop: position, failed: true }; } - if ( - !this.isRepeat && - (!vimState.recordedState.operator || !(isIMovement(result) && result.failed)) - ) { - vimState.lastSemicolonRepeatableMovement = new MoveFindBackward(this.keysPressed, true); - vimState.lastCommaRepeatableMovement = new MoveFindForward(this.keysPressed, true); - } - return result; } } @@ -640,6 +630,9 @@ class MoveTilForward extends BaseMovement { result = position.tilForwards(toFind, 2); } + vimState.lastSemicolonRepeatableMovement = new MoveTilForward(this.keysPressed, true); + vimState.lastCommaRepeatableMovement = new MoveTilBackward(this.keysPressed, true); + if (!result) { return { start: position, stop: position, failed: true }; } @@ -648,14 +641,6 @@ class MoveTilForward extends BaseMovement { result = result.getRight(); } - if ( - !this.isRepeat && - (!vimState.recordedState.operator || !(isIMovement(result) && result.failed)) - ) { - vimState.lastSemicolonRepeatableMovement = new MoveTilForward(this.keysPressed, true); - vimState.lastCommaRepeatableMovement = new MoveTilBackward(this.keysPressed, true); - } - return result; } } @@ -678,18 +663,13 @@ class MoveTilBackward extends BaseMovement { result = position.tilBackwards(toFind, 2); } + vimState.lastSemicolonRepeatableMovement = new MoveTilBackward(this.keysPressed, true); + vimState.lastCommaRepeatableMovement = new MoveTilForward(this.keysPressed, true); + if (!result) { return { start: position, stop: position, failed: true }; } - if ( - !this.isRepeat && - (!vimState.recordedState.operator || !(isIMovement(result) && result.failed)) - ) { - vimState.lastSemicolonRepeatableMovement = new MoveTilBackward(this.keysPressed, true); - vimState.lastCommaRepeatableMovement = new MoveTilForward(this.keysPressed, true); - } - return result; } } diff --git a/test/mode/normalModeTests/motions.test.ts b/test/mode/normalModeTests/motions.test.ts index d3542529d52..7a8c9aa5dd3 100644 --- a/test/mode/normalModeTests/motions.test.ts +++ b/test/mode/normalModeTests/motions.test.ts @@ -228,6 +228,13 @@ suite('Motions in Normal Mode', () => { end: ['text|\tttext'], }); + newTest({ + title: "Can handle 'f' and find back search", + start: ['text tex|t'], + keysPressed: 'fe,', + end: ['text t|ext'], + }); + newTest({ title: "Can handle 'F'", start: ['text tex|t'], @@ -242,6 +249,13 @@ suite('Motions in Normal Mode', () => { end: ['tex|t text'], }); + newTest({ + title: "Can handle 'F' and find back search", + start: ['|text text'], + keysPressed: 'Fx,', + end: ['te|xt text'], + }); + newTest({ title: "Can handle 't'", start: ['text tex|t'], @@ -256,6 +270,13 @@ suite('Motions in Normal Mode', () => { end: ['te|xt text'], }); + newTest({ + title: "Can handle 't' and find back search", + start: ['text tex|t'], + keysPressed: 'te,', + end: ['text te|xt'], + }); + newTest({ title: "Can handle 'T'", start: ['text tex|t'], @@ -270,6 +291,13 @@ suite('Motions in Normal Mode', () => { end: ['text t|ext'], }); + newTest({ + title: "Can handle 'T' and find back search", + start: ['|text text'], + keysPressed: 'Tx,', + end: ['t|ext text'], + }); + newTest({ title: 'Can run a forward search', start: ['|one two three'],