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! RemoveUnchangedLine()
9 if match(getline('.'), "<{}>") >= 0
17 function! Snippet(abbr, str)
18 if type(a:str) == type([])
19 return Snippet(a:abbr, join(a:str, "\n"))
21 let st = g:snip_start_tag
22 let et = g:snip_end_tag
23 let cd = g:snip_elem_delim
24 let str = substitute(a:str, '<{.\{-}\zs:\ze.\{-}}>', cd, "")
25 let str = substitute(str, '<{', st, "")
26 let str = substitute(str, '}>', et, "")
27 exec 'Snippet '.a:abbr.' '.str
30 function! SnippetFile(filename)
31 let abbr = fnamemodify(a:filename, ':t:r')
32 let str = readfile(a:filename)
33 return Snippet(abbr, str)
36 function! ParameterizedModule()
37 let current_file = expand("%")
38 let t = substitute(current_file, '\.pm', '', '')
39 let t = substitute(t, 'lib/', '', '')
41 " Sadly, this does not work because : is a special character in snippet
42 " tag names. Any ideas?
43 "let module = substitute(t, '/', '::', 'g')
44 let module = substitute(t, '/.*', '', '')
46 return '<{' . module . '}>'
49 call Snippet('class', [
50 \"package ".ParameterizedModule().";",
53 \"extends '<{SuperClass:RemoveUnchangedLine()}>;",
57 \"__PACKAGE__->meta->make_immutable;",
61 call Snippet('role', [
62 \"package ".ParameterizedModule().";",
73 \ "isa => '<{Str}>',",
74 \ "<{options:RemoveUnchangedLine()}>",
76 call Snippet('hasl', [
79 \ "isa => '<{Str}>',",
81 \ "<{options:RemoveUnchangedLine()}>",
84 \"sub _build_<{attr}> {",
85 \ "my $self = shift;",
90 \ "my $self = shift;",
91 \ "my (<{arg:RemoveUnchangedLine()}>) = @_;",
94 call Snippet('around', [
95 \"around <{name}> => sub {",
96 \ "my $<{next}> = shift;",
97 \ "my $self = shift;",
100 call Snippet('before', [
101 \"before <{name}> => sub {",
102 \ "my $self = shift;",
105 call Snippet('after', [
106 \"after <{name}> => sub {",
107 \ "my $self = shift;",
112 call Snippet('prole', [
113 \"package ".ParameterizedModule().";",
114 \"use MooseX::Role::Parameterized;",
124 \"no MooseX::Role::Parameterized;",
128 "for file in globpath(&rtp, 'snippets/*')
129 "call SnippetFile(file)