Как добавить скелетный текст в новые файлы vim?

9

Я использую Vim для написания C ++, и у меня есть довольно много #include<>утверждений, комментариев и т. Д., Которые я должен включать в каждый новый файл, который я создаю. я добавил

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) 

на мой vimrc, потому что я слышал, что это создает буфер с нужным мне текстом. Как мне добавить этот текст в новый файл? Есть ли простой способ сделать это из буфера, или есть другой простой способ сделать это? Я также немного слышал о шаблонных плагинах. Есть ли очень простой, который мог бы сделать это для меня?

electriccello
источник
1
Пробовали ли вы редактировать новый файл C ++ после добавления этого autocmdи создания файла скелета?
Муру
1
Я попытался создать новый файл с расширением .cpp и отредактировать его с помощью Vim. Открыв его для редактирования, он все еще был пустым. Есть ли еще один шаг, который мне нужно сделать?
electriccello
2
Нет, вы должны были видеть содержимое файла скелета уже включены. Что делать, если вы запускаете вручную :r C:\(full file path of skeleton text file)? Вы получаете какие-либо ошибки?
Муру
3
@electriccello Ах, :enewне будет работать, но :e newfile.cppдолжен работать, если его newfile.cppеще не было (даже если он пуст).
Муру
5
Причина не :enewработает, потому что вы редактируете новый безымянный буфер, а затем сохраняете его как файл .cpp. BufNewFileсрабатывает только если вы редактируете новый файл с целевым именем файла.
фруктовая обезьяна

Ответы:

6

Скелетный текст из существующего файла можно добавить в новый файл, вставив строку

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file)

в Vimrc. BufNewFileСобытие не работает , если новый файл создается в два этапа , используя :enewто :sav filename. Вместо этого создание нового файла с помощью :e filenameзапускает BufNewFileавтокоманду события в vimrc, добавляя содержимое скелетного текстового файла во вновь созданный файл.

electriccello
источник
1
Также см :help template.
Мартин Турной
Чтобы предотвратить .vimrcпереполнение моего компьютера , есть ли какое-либо другое место в ~/.vim/иерархии, в которое я могу поместить его?
Сантош Кумар
Это также добавляет дополнительную пустую строку вверху в новом файле.
Сантош Кумар
5

Действительно, плагины расширения шаблонов помогут вам в этой задаче. :readэто шаг 0 плагинов расширения шаблона.

Например, mu-template попытается включить foo.h из foo.cpp, если обнаружен foo.h. Это также позволит расширить заголовки динамическими данными внутри них (дата, автор, лицензия / авторские права и т. Д.).

Люк Эрмитт
источник
1

Чтобы установить скелет по умолчанию для всех типов файлов и настроить его для конкретного проекта:

function! s:load_skeleton(type)
  " do nothing if no filetype
  if empty(a:type) | return | endif

  " glob every directory of rtp to search for skeleton/filetype
  let skeletons = globpath(&rtp, 'skeleton/' . a:type, 0, 1)
  if empty(skeletons) | return | endif

  " read last skeleton into 1st line.
  exe '0read ' . skeletons[-1]
endfunction

augroup aug_skeleton
  au!

  " BufNewFile event is trigged when you edit a new file.
  autocmd BufNewFile * call s:load_skeleton(&filetype)
augroup end

Помещенный по умолчанию скелетов под ~/.vim/skeleton, например: ~/.vim/skeleton/vim, ~/.vim/skeleton/sh.

Поместите конкретный скелет проекта balabala/project/.vim/skeleton. До тех пор, пока он не ~/.vimпоявится balabala/project/.vimв :h rtp, balabala/project/skeleton/будет использоваться как каталог скелета.

dedowsdi
источник