in src/main/java/com/maddyhome/idea/vim/action/change/RepeatChangeAction.kt [26:85]
override fun execute(
editor: VimEditor,
context: ExecutionContext,
cmd: Command,
operatorArguments: OperatorArguments,
): Boolean {
val state = injector.vimState
var lastCommand = VimRepeater.lastChangeCommand
if (lastCommand == null && Extension.lastExtensionHandler == null) return false
// Save state
val save = state.executingCommand
val lastFTCmd = injector.motion.lastFTCmd
val lastFTChar = injector.motion.lastFTChar
val reg = injector.registerGroup.currentRegister
val lastHandler = Extension.lastExtensionHandler
val repeatHandler = VimRepeater.repeatHandler
state.isDotRepeatInProgress = true
// A fancy 'redo-register' feature
// VIM-2643, :h redo-register
if (VimRepeater.lastChangeRegister in '1'..'8') {
VimRepeater.lastChangeRegister = VimRepeater.lastChangeRegister.inc()
}
injector.registerGroup.selectRegister(VimRepeater.lastChangeRegister)
if (repeatHandler && lastHandler != null) {
val processor = CommandProcessor.getInstance()
processor.executeCommand(
editor.ij.project,
{ lastHandler.execute(editor, context, operatorArguments) },
"Vim " + lastHandler.javaClass.simpleName,
null,
)
} else if (!repeatHandler && lastCommand != null) {
if (cmd.rawCount > 0) {
lastCommand = lastCommand.copy(rawCount = cmd.rawCount)
}
state.executingCommand = lastCommand
val arguments = operatorArguments.copy(count0 = lastCommand.rawCount)
injector.actionExecutor.executeVimAction(editor, lastCommand.action, context, arguments)
VimRepeater.saveLastChange(lastCommand)
}
state.isDotRepeatInProgress = false
// Restore state
if (save != null) state.executingCommand = save
VimPlugin.getMotion().setLastFTCmd(lastFTCmd, lastFTChar)
if (lastHandler != null) Extension.lastExtensionHandler = lastHandler
VimRepeater.repeatHandler = repeatHandler
Extension.reset()
VimPlugin.getRegister().selectRegister(reg)
return true
}