-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSimpleTemplate.vim
More file actions
129 lines (110 loc) · 3.26 KB
/
Copy pathSimpleTemplate.vim
File metadata and controls
129 lines (110 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
"
" @name:wondger<wondger@gmail.com>
" @description:new file from template file
" @date:2012-03-31
" @url:http://wondger.github.com/simpletemplate
" @todo:
" [X]replace flag in whole file
" @changelog:
"
"setting in vimrc
"there are some system variable you can use in SimpleTemplate
"2012-04-10,#filename#
"let g:SimpleTemplate = {
"path:$VIM.'/vimfiles/template/',
"default_name:'noname',
"cursor:'#cursor#',
"flags:[
"{
"key:'#author#',
"value:'wondger'
"},
"{
"key:'#date#',
"value:'#date#'
"},
"{
"key:'#author#',
"value:'wondger'
"},
"{
"key:'#email#',
"value:'wondger@gmail.com'
"},
"{
"key:'#url#',
"value:'http://omiga.org/'
"}
"]
"}
if has('unix')
let g:SimpleTemplatePath=$HOME.'/.vim/template/'
else
let g:SimpleTemplatePath=$VIM.'/vimfiles/template/'
endif
let g:SimpleTemplateName='noname'
let g:SimpleTemplateCursorFlag='#cursor#'
let g:SimpleTemplateFileType='vim'
function! SimpleTemplate(tname,tmode)
"path
let tpath = exists('g:SimpleTemplate.path') ? g:SimpleTemplate.path : $VIM.'/vimfiles/template/'
let g:SimpleTemplatePath = tpath
let template = tpath.a:tname
"cursor
let tcursor= exists('g:SimpleTemplate.cursor') ? g:SimpleTemplate.cursor : g:SimpleTemplateCursorFlag
let g:SimpleTemplateCursorFlag = tcursor
"get filetype by postfix
let mfiletype = matchlist(template,'\.\([^\.]\+\)$')
let tfiletype = exists('mfiletype[1]') ? mfiletype[1] : g:SimpleTemplateFileType
let tname = exists('g:SimpleTemplate.default_name') ? g:SimpleTemplate.default_name : ''
let g:SimplateTemplateName = tname
if !filereadable(template)
echo "Template ".template.": not exists!"
return
endif
if a:tmode == 'tab'
if strlen(tname) && strlen(tfiletype)
execute 'tabnew '.tname.'.'.tfiletype
elseif strlen(tfiletype)
execute 'tabnew '.tname
else
tabnew
endif
else
if strlen(tname) && strlen(tfiletype)
execute 'new '.tname.'.'.tfiletype
elseif strlen(tfiletype)
execute 'new '.tname
else
tabnew
endif
endif
execute 'setlocal filetype='.tfiletype
execute 'read '.template
"delete first line
normal gg
delete g
let flags = exists('g:SimpleTemplate.flags') ? g:SimpleTemplate.flags : []
for flag in flags
let value = flag.value
if flag.value == '#date#'
let value = strftime('%Y-%m-%d')
endif
if flag.value == '#filename#'
let value = tname.'.'.tfiletype
endif
if search(flag.key,'n')
execute '%s/'.flag.key.'/'.value.'/g'
endif
endfor
let hasCursor = search(g:SimpleTemplateCursorFlag)
if hasCursor
let line = getline('.')
let repl = substitute(line, g:TemplateCursorFlag, '', '')
call setline('.', repl)
endif
endfunction
com! -nargs=1 -range=% SimpleTemplate call SimpleTemplate(<f-args>,'window')
if v:version > 700
com! -nargs=1 -range=% SimpleTemplateTab call SimpleTemplate(<f-args>,'tab')
endif