我正在使用 ruby 界面编写一个 vim 插件。
当我执行VIM::command(...)
时,如何检测 vim 在执行此命令期间是否引发错误,以便我可以跳过更多命令并向用户提供更好的消息?
Vim 的全局变量v:errmsg
会给你最后一个错误。如果要检查是否发生错误,可以先将其设置为空字符串,然后再进行检查:
let v:errmsg = ""
" issue your command
if v:errmsg != ""
" handle the error
endif;
我会留给你把它转移到 Ruby API。也可以:h v:errmsg
从 Vim 内部看到。其他有用的全局变量可能是:
v:exception
v:throwpoint
编辑- 这应该有效(注意:涉及一些魔法):
module VIM
class Error < StandardError; end
class << self
def command_with_error *args
command('let v:errmsg=""')
command(*args)
msg = evaluate('v:errmsg')
raise ::VIM::Error, msg unless msg.empty?
end
end
end
# Usage
# use sil[ent]! or the error will bubble up to Vim
begin
VIM::command_with_error('sil! foobar')
rescue VIM::Error => e
puts 'Rescued from: ' + e.message;
end
# Output
Rescued from: E492: Not an editor command: sil! foobar