我在~/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 ++文件),并将上述模板与具体日期和格式?还有如何仅在创建新文件而不是现有文件时插入它?
答案 0 :(得分:1)
首先:有模板插件,您应该在网上搜索“ vim模板插件”。也许您发现有用的东西。
如果您想自己做:
像这样创建模板文件(我以~/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