在 vimscript 中,function
定义可以带一个abort
参数。引用文档,
When the [abort] argument is added, the function will
abort as soon as an error is detected
这使我严重质疑函数在遇到错误时通常会做什么。盲目地跌入黑暗?
实际上是做什么的abort
?它会破坏所有的try...endtry
块吗?你什么时候想使用它,什么时候你想避免它?
在 vimscript 中,function
定义可以带一个abort
参数。引用文档,
When the [abort] argument is added, the function will
abort as soon as an error is detected
这使我严重质疑函数在遇到错误时通常会做什么。盲目地跌入黑暗?
实际上是做什么的abort
?它会破坏所有的try...endtry
块吗?你什么时候想使用它,什么时候你想避免它?
正如 glts 所提到的,所有复杂的细节都记录在 中:help except-compat
,答案基本上归结为 Vimscript 的向后兼容性和固有的灵活性。
从录制的宏到映射到自定义函数,这是一个自然的过程。考虑到这一点,当函数中的命令导致错误(例如%s/foo/bar/
,不匹配和丢失e
标志)时,处理应该继续进行。
另一方面,当您编写“工业级”映射时try..catch
,无论如何,您几乎总是会在函数调用层次结构中使用一个块(以避免任何多行错误Error detected while processing function: ...
,而是向用户显示一个很好的错误消息)。
因此,在实践中,大多数已发布的插件不使用abort
, 但是try..catch
,并且对于快速、即兴的东西,无论如何,您通常不会太在意错误处理。