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! RemoveUnchangedLineSemicolon()
18 if match(getline('.'), "<{}>") >= 0
24 "normal! o " we can't actually change what line we're on :/
29 function! Snippet(abbr, str)
30 if type(a:str) == type([])
31 return Snippet(a:abbr, join(a:str, "\n"))
33 let st = g:snip_start_tag
34 let et = g:snip_end_tag
35 let cd = g:snip_elem_delim
36 let str = substitute(a:str, '<{.\{-}\zs:\ze.\{-}}>', cd, "")
37 let str = substitute(str, '<{', st, "")
38 let str = substitute(str, '}>', et, "")
39 exec 'Snippet '.a:abbr.' '.str
42 function! SnippetFile(filename)
43 let abbr = fnamemodify(a:filename, ':t:r')
44 let str = readfile(a:filename)
45 return Snippet(abbr, str)
48 function! ParameterizedModule()
49 let current_file = expand("%")
50 let t = substitute(current_file, '\.pm', '', '')
51 let t = substitute(t, 'lib/', '', '')
53 " Sadly, this does not work because : is a special character in snippet
54 " tag names. Any ideas?
55 "let module = substitute(t, '/', '::', 'g')
56 let module = substitute(t, '/.*', '', '')
58 return '<{' . module . '}>'
61 call Snippet('class', [
62 \"package ".ParameterizedModule().";",
64 \"extends '<{SuperClass:RemoveUnchangedLine()}>';",
68 \"__PACKAGE__->meta->make_immutable;",
72 call Snippet('role', [
73 \"package ".ParameterizedModule().";",
84 \ "isa => '<{Str}>',",
85 \ "<{options:RemoveUnchangedLine()}>",
87 call Snippet('hasl', [
90 \ "isa => '<{Str}>',",
92 \ "<{options:RemoveUnchangedLine()}>",
95 \"sub _build_<{attr}> {",
96 \ "my $self = shift;",
101 \ "my $self = shift;",
102 \ "my (<{arg:RemoveUnchangedLine()}>) = @_;",
105 call Snippet('around', [
106 \"around <{name}> => sub {",
107 \ "my $<{next}> = shift;",
108 \ "my $self = shift;",
111 call Snippet('before', [
112 \"before <{name}> => sub {",
113 \ "my $self = shift;",
116 call Snippet('after', [
117 \"after <{name}> => sub {",
118 \ "my $self = shift;",
121 call Snippet('subtype', [
122 \"subtype '<{name}>'",
123 \ "=> as '<{supertype}>'",
124 \ "=> where { <{predicate:RemoveUnchangedLine()}> }",
125 \ "=> message { \"<{message:RemoveUnchangedLineSemicolon()}>\" }",
129 call Snippet('prole', [
130 \"package ".ParameterizedModule().";",
131 \"use MooseX::Role::Parameterized;",
141 \"no MooseX::Role::Parameterized;",
145 "for file in globpath(&rtp, 'snippets/*')
146 "call SnippetFile(file)