0

我尝试在我的文本文档中捕获带有计算的行
并执行它们。

我在我的函数中使用它:

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。
我还想知道它涉及哪个计算(我的文本文档中的哪一行):

如果检测到错误 = 回波计算

如何检查是否有错误消息并回显变量“计算”?

4

1 回答 1

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
于 2012-05-07T08:26:13.947 回答