in vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api/VimScriptExecutorBase.kt [30:94]
override fun execute(
script: String,
editor: VimEditor,
context: ExecutionContext,
skipHistory: Boolean,
indicateErrors: Boolean,
vimContext: VimLContext?,
): ExecutionResult {
try {
injector.vimscriptExecutor.executingVimscript = true
var finalResult: ExecutionResult = ExecutionResult.Success
val myScript = injector.vimscriptParser.parse(script)
myScript.units.forEach { it.vimContext = vimContext ?: myScript }
// Record the command in the history before executing it
if (!skipHistory) {
injector.historyGroup.addEntry(VimHistory.Type.Command, script)
}
for (unit in myScript.units) {
try {
val result = unit.execute(editor, context)
if (result is ExecutionResult.Error) {
finalResult = ExecutionResult.Error
if (indicateErrors) {
injector.messages.indicateError()
}
}
} catch (e: ExException) {
if (e is FinishException) {
break
}
finalResult = ExecutionResult.Error
if (indicateErrors) {
injector.messages.showStatusBarMessage(editor, e.message)
injector.messages.indicateError()
} else {
logger.warn("Failed while executing $unit. " + e.message)
}
} catch (e: NotImplementedError) {
if (indicateErrors) {
injector.messages.showStatusBarMessage(editor, "Not implemented yet :(")
injector.messages.indicateError()
}
} catch (e: Exception) {
logger.warn(e.toString())
if (injector.application.isUnitTest()) {
throw e
}
}
}
if (!skipHistory && myScript.units.size == 1 && myScript.units[0] is Command && myScript.units[0] !is RepeatCommand) {
injector.registerGroup.storeTextSpecial(LAST_COMMAND_REGISTER, script)
}
return finalResult
} finally {
injector.vimscriptExecutor.executingVimscript = false
// Initialize any extensions that were enabled during execution of this vimscript
// See the doc of this function for details
enableDelayedExtensions()
}
}