Skip to content

Commit 63bb909

Browse files
authored
Fix dot repeat after exiting Visual modes or command line (#8090)
Fixes #7627
1 parent 974ba70 commit 63bb909

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/mode/modeHandler.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,18 @@ export class ModeHandler implements vscode.Disposable, IModeHandler {
797797
(ranRepeatableAction && this.vimState.currentMode === Mode.Normal) ||
798798
this.createUndoPointForBrackets();
799799

800+
// We don't want to record a repeatable action when exiting from these modes
801+
// by pressing <Esc>
802+
if (
803+
(prevMode === Mode.Visual ||
804+
prevMode === Mode.VisualBlock ||
805+
prevMode === Mode.VisualLine ||
806+
prevMode === Mode.CommandlineInProgress) &&
807+
action.keysPressed[0] === '<Esc>'
808+
) {
809+
ranRepeatableAction = false;
810+
}
811+
800812
// Record down previous action and flush temporary state
801813
if (ranRepeatableAction && this.vimState.lastCommandDotRepeatable) {
802814
globalState.previousFullAction = this.vimState.recordedState;

test/mode/normalModeTests/dot.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,20 @@ suite('Repeat content change', () => {
218218
keysPressed: 'a<C-t>b<left>c<Esc>j.',
219219
end: ['\tonecb', 'tw|co'],
220220
});
221+
222+
newTest({
223+
title: 'Can repeat change after v<Esc> and :<Esc>',
224+
start: ['aaa bbb ccc dd|d'],
225+
keysPressed: 'ciwxxx<Esc>' + 'bb.' + 'bbv<Esc>.' + 'bb:<Esc>.',
226+
end: ['xx|x xxx xxx xxx'],
227+
});
228+
229+
newTest({
230+
title: 'Can repeat change after V<Esc> and <C-q><Esc>',
231+
start: ['aaa bbb ccc dd|d'],
232+
keysPressed: 'ciwxxx<Esc>' + 'bb.' + 'bbV<Esc>.' + 'bb<C-q><Esc>.',
233+
end: ['xx|x xxx xxx xxx'],
234+
});
221235
});
222236

223237
suite('Dot Operator repeat with remap', () => {

0 commit comments

Comments
 (0)