Як додати текст скелета до нових файлів vim?


9

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

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

моєму vimrc, тому що я чув, що це створює буфер з потрібним мені текстом. Як мені додати додавання цього тексту до нового файлу? Чи є простий спосіб зробити це з буфера, чи є інший простий спосіб зробити це? Я також мало чула про плагіни шаблонів. Чи є дуже простий, який міг би зробити це для мене?


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спрацьовує, лише якщо ви редагуєте новий файл із цільовим іменем файлу.
fruglemonkey

Відповіді:


6

Текст скелета з наявного файлу можна додати до нового файлу, вставивши рядок

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

у vimrc. BufNewFileПодія не працює , якщо новий файл створюється в два етапи , використовуючи :enewто :sav filename. Натомість створення нового файлу за допомогою :e filenameзапускає BufNewFileавтокоманду події у vimrc, додаючи вміст текстового файлу скелета до новоствореного файлу.



Щоб запобігти .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/буде використовуватися як каталог скелетів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.