1

Я пытаюсь сделать функцию автоматического заголовка на vim, чтобы создать автоматический заголовок для любого типа файла c, php, python и т.д., И я делаю шаблон только в папке ~/.vim, но я хочу получить тип в переменной и отправить в группу и адрес autocmd BufNewFile.

Что-то вроде того:

let type=expand('%:e')
au BufNewFile *. .type  so '~/.vim/.type._header.txt'

Но vim не видит тип как переменную, видит что строка, у кого-нибудь есть идея?

2 ответа2

0

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

Что касается того, как в mu-шаблоне у меня есть au BufNewFile который запускает вызов функции, где я просто использую &ft (вместо раскрытия expand('%:e')), чтобы выбрать правильный файл шаблона.

Что касается манипуляций со строками, Ingo уже указал, что вы забыли извлечь имя переменной из строки. т.е. это должно было быть:

au BufNewFile * exe '0read ~/.vim/'.&ft.'_header.txt'
0

Правила оценки 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .