如果错误消息回显行内容

时间:2012-05-07 07:18:05

标签: function vim echo

我尝试在文本文档中使用计算来捕获行 并执行它们。

我在我的函数中使用它:

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中的哪一行):

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

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

1 个答案:

答案 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