我尝试在文本文档中使用计算来捕获行 并执行它们。
我在我的函数中使用它:
for i in range(startline,endline)
let calculation = getline(i)
...
let out = eval(calculation)
...
endfor
有时出现问题,我收到此消息:
Error detected while processing function....
Line ...
E488: Trailing Characters
Line ..是我函数中的line-nr 我想知道它涉及哪个计算(我的文档doc中的哪一行):
如果检测到错误=回声计算
如何检查是否有错误消息并回显变量“计算”?
答案 0 :(得分:2)
有两种方法可以处理函数内的脚本错误:
第一个是通过:silent!
来抑制错误。两个缺点:您必须手动检查是否成功,并且也会抑制评估脚本的任何正常输出(除非您使用:unsilent
进行扭曲)。
let v:errmsg = ''
silent! let out = eval(calculation)
if v:errmsg != ''
" error
endif
我会建议第二种方法通过try ... catch,这可以避免输出问题,并且必须明确检查错误:
try
let out = eval(calculation)
catch /^Vim\%((\a\+)\)\=:E/
" v:exception contains what is normally in v:errmsg, but with extra
" exception source info prepended, which we cut away.
let v:errmsg = printf("Line: %d\nCalculation: %s\nError: %s", i, calculation, substitute(v:exception, '^Vim\%((\a\+)\)\=:', '', ''))
echohl ErrorMsg
echomsg v:errmsg
echohl None
endtry