1 " See http://www.vim.org/scripts/script.php?script_id=1318
2 " Written by Sartak and doy, feel free to add your own!
4 if !exists('loaded_snippet') || &cp
8 function! RemoveEmptySuperClass()
10 s/extends '<{}>';\n\n//e
17 function! RemoveEmptyLine()
22 function! Snippet(abbr, str)
23 if type(a:str) == type([])
24 return Snippet(a:abbr, join(a:str, "\n"))
26 let st = g:snip_start_tag
27 let et = g:snip_end_tag
28 let cd = g:snip_elem_delim
29 let str = substitute(a:str, '<{.\{-}\zs:\ze.\{-}}>', cd, "")
30 let str = substitute(str, '<{', st, "")
31 let str = substitute(str, '}>', et, "")
32 exec 'Snippet '.a:abbr.' '.str
35 function! SnippetFile(filename)
36 let abbr = fnamemodify(a:filename, ':t:r')
37 let str = readfile(a:filename)
38 return Snippet(abbr, str)
41 function! ParameterizedModule()
42 let current_file = expand("%")
43 let t = substitute(current_file, '\.pm', '', '')
44 let t = substitute(t, 'lib/', '', '')
46 " Sadly, this does not work because : is a special character in snippet
47 " tag names. Any ideas?
48 "let module = substitute(t, '/', '::', 'g')
49 let module = substitute(t, '/.*', '', '')
51 return '<{' . module . '}>'
54 call Snippet('class', [
55 \"package ".ParameterizedModule().";",
58 \"extends '<{SuperClass:RemoveEmptySuperClass()}>';",
62 \"__PACKAGE__->meta->make_immutable;",
66 call Snippet('role', [
67 \"package ".ParameterizedModule().";",
78 \ "isa => '<{Str}>',",
79 \ "<{options:RemoveEmptyLine()}>",
81 call Snippet('hasl', [
84 \ "isa => '<{Str}>',",
86 \ "<{options:RemoveEmptyLine()}>",
89 \"sub _build_<{attr}> {",
90 \ "my $self = shift;",
95 \ "my $self = shift;",
98 call Snippet('around', [
99 \"around <{name}> => sub {",
100 \ "my $<{next}> = shift;",
101 \ "my $self = shift;",
104 call Snippet('before', [
105 \"before <{name}> => sub {",
106 \ "my $self = shift;",
109 call Snippet('after', [
110 \"after <{name}> => sub {",
111 \ "my $self = shift;",
116 call Snippet('prole', [
117 \"package ".ParameterizedModule().";",
118 \"use MooseX::Role::Parameterized;",
128 \"no MooseX::Role::Parameterized;",
132 "for file in globpath(&rtp, 'snippets/*')
133 "call SnippetFile(file)