Как автоматически вставить код шаблона в новый файл с определенным расширением, который создается в определенном каталоге? - PullRequest
0 голосов
/ 19 января 2019

У меня есть каталог проекта на ~/project. В этом каталоге проекта также есть много подкаталогов. То, что я пытался сделать, это то, что всякий раз, когда я создаю файл c ++ (который подразумевает файлы с расширениями .cc, .cpp, .h и т. Д.) В определенном каталоге, автоматически вставляются определенные шаблоны кода в этот файл.

Шаблон имеет следующую форму:

/* 
 * Author :  Name
 * Date   :  Sat Jan 19 12:42:56 IST 2019 (:r!date)
*/  

Обычно датой является дата создания этого файла, которую можно вставить с помощью :r!date.

Идея, которую я до сих пор выдвигал, заключается в создании файла template.vim со следующим содержимым:

call setline(1, '/*')
call setline(2, 'Author : ')
" the line below is a blunder. but i hope you get the gist of what im trying.
call setline(3, 'Date : '+ execute "normal! :r!date")
call setline(4, '*/')  

затем до получения файла шаблона при создании нового файла c ++, например:

autocmd BufNewFile *.cc,*.cpp,*.h source ~/.vim/ftplugin/template.vim  

Как эффективно добавить условия проверки создания файла в моем каталоге ~ / project или в любом из его подкаталогов с расширением файла c ++ и вставить указанный выше шаблон с указанием конкретного дата и формат? Кроме того, как вставить это только при создании нового файла, а не существующего файла?

1 Ответ

0 голосов
/ 19 января 2019

Прежде всего: есть плагины шаблонов, вы должны искать в сети "vim template plugin".Возможно, вы найдете что-то полезное.

Если вы хотите сделать это самостоятельно:

Создайте файл шаблона следующим образом (я предполагаю ~/tmpl/tmpl.cpp как имя):

/* 
 * Author :  <<name>>
 * Date   :  <<date>>
 */

и в вашем vimrc:

function AddTemplate(tmpl_file)
    exe "0read " . a:tmpl_file
    let substDict = {}
    let substDict["name"] = $USER
    let substDict["date"] = strftime("%Y %b %d %X")
    exe '%s/<<\([^>]*\)>>/\=substDict[submatch(1)]/g'
    set nomodified
    normal G
endfunction

autocmd BufNewFile *.c,*.cc,*.cpp,*.h call AddTemplate("~/tmpl/tmpl.cpp")

set nomodified сообщает Vim, что файл не был изменен.Таким образом, вы можете выйти из файла с помощью :q, если не добавляете дополнительный текст.Полезно, если вы ввели неверное имя файла.

Если вы хотите воздействовать только на файлы в специальном каталоге ~/project, вы можете добавить следующее в начале функции AddTemplate:

let fully_qualified_file = expand('%:p')
if 0 != match(fully_qualified_file, $HOME . '/project/.*')
    return
endif
...