Часто, dynamc языки (особенно Python и lua) встраиваются в программы для добавления более подобной плагину функциональности и потому что они - высокоуровневые языки, которые облегчают добавлять определенное поведение, где low/mid-level язык не нужен.
Lua specificially испытывает недостаток во всех системных вызовах низкого уровня, потому что он был разработан для простоты в употреблении для добавления функциональности в рамках программы, не как общий язык программирования.
Да, "smartindent" vim не очень удачно назван. Некоторое время у меня были проблемы с этим, прежде чем я понял, что не так. Для других, если вы заметили странное поведение отступа после строк, начинающихся с «если» или «для», отключите smartindent. Вы столкнетесь с этим лотом , если начнете использовать vim в качестве текстового процессора.
Из файла справки vim, 'smartindent' будет иметь отступ после строки, начинающейся с ключевого слова из 'cinwords', что по умолчанию - «если, еще, в то время как, делать, для, переключать».
Проблема заключалась в том, что у меня был включен "smartindent". Отключение этого для документов LaTeX решило эту проблему:
au BufEnter *.tex set nosmartindent