Подтвердить что ты не робот

Vimscript: какая точка "прервать" в определении функции?

В vimscript определения function могут принимать аргумент abort. Чтобы процитировать документы,

When the [abort] argument is added, the function will
abort as soon as an error is detected

Это приводит меня к серьезному вопросу о том, какие именно функции обычно выполняют, когда они сталкиваются с ошибками. Наткнуться вслепую в темноту?

Что делает abort на самом деле? Разбивает ли он все блоки try...endtry? Когда вы хотите использовать его, и когда вы хотите его избежать?

4b9b3361

Ответ 1

Как упоминалось выше, все сложные детали документированы в :help except-compat, и ответ в основном сводится к обратной совместимости и присущей гибкости Vimscript.

Существует естественная прогрессия от записанных макросов до сопоставлений с пользовательскими функциями. Имея это в виду, может иметь смысл, что когда команда в функции вызывает ошибку (например, %s/foo/bar/, которая не соответствует и не пропускает флаг e), обработка должна продолжаться.

С другой стороны, когда вы пишете сопоставления "промышленного класса", вы почти всегда будете использовать блок try..catch внутри иерархии вызовов функций, во всяком случае (чтобы избежать многострочных ошибок Error detected while processing function: ..., а вместо этого показывать приятное сообщение об ошибке для пользователя).

Таким образом, на практике большинство опубликованных плагинов не используют abort, но try..catch, а для быстрого, вне-манжетного материала, в любом случае, вы, как правило, не слишком заботитесь об обработке ошибок.