Правила оценки Vim отличаются от большинства языков программирования. Вам необходимо использовать :execute
для оценки переменной (или выражения); в противном случае это воспринимается буквально; т.е. Vim использует само имя переменной в качестве аргумента.
let type = expand('%:e')
execute 'au BufNewFile *.' . type 'so ~/.vim/' . type . '_header.txt'
Я бы, вероятно, использовал printf()
вместо конкатенации для улучшения читабельности.
execute printf('au BufNewFile *.%s so ~/.vim/%s_header.txt', type, type)
Обратите внимание, что при вашем подходе вы в основном дублируете встроенное определение типов файлов, которое уже обеспечивает сопоставление расширений файлов с типами. Я бы лучше определил общий хук в BufNewFile
, а затем оценил &filetype
. Вам просто нужно убедиться, что ваше событие определено после события для определения типа файла, например, путем перемещения определения из ~/.vimrc
в ~/.vim/plugin/
script.