*sonictemplate-vim.txt* SonicTemplate for Vim ------------------------------------------------------- SonicTemplate: hi speed coding method ------------------------------------------------------- Author: Yasuhiro Matsumoto WebSite: http://mattn.kaoriya.net/ Repository: http://github.com/mattn/sonictemplate-vim Site: http://mattn.github.com/sonictemplate-vim License: BSD style license ============================================================================== CONTENTS *sonictemplate-vim-contents* Introduction |sonictemplate-vim-introduction| Install |sonictemplate-vim-install| Tutorial |sonictemplate-vim-tutorial| Customize |sonictemplate-vim-customize| Unite Source |sonictemplate-vim-unitesource| Write Your Template |sonictemplate-vim-writetemplate| ============================================================================== INTRODUCTION *sonictemplate-vim-introduction* |SonicTemplate| is easy and high speed coding method. * Choose template for the filetype * Few typings. * Flexible customization. ============================================================================== INSTALL *sonictemplate-vim-install* Install the distributed files into Vim runtime directory which is usually ~/.vim/, or $HOME/vimfiles on Windows. If you install pathogen that provided from Tim Pope, you should extract the file into 'bundle' directory. ============================================================================== TUTORIAL *sonictemplate-vim-tutorial* For example, you are writing C++ file. 1. Create main function Open new C++ file, and type following. > :Template boost-main < Then you can see following. > #include #include #include int main(int argc, char* argv[]) { _ return 0; } < The cursor is in the position of |_|. 2. Add foreach loop Type following. > :Template boost-for < Then you will be asked like following. > variable: < Then type "foo". > #include #include #include int main(int argc, char* argv[]) { BOOST_FOREACH(auto x, foo) { _ } return 0; } < 3. Add std::cout << xxx << std::endl; > :Template cout < Answer "x" for the question "string:". > #include #include #include int main(int argc, char* argv[]) { BOOST_FOREACH(auto x, foo) { std::cout << x << std::endl; } return 0; } < ============================================================================== CUSTOMIZE *sonictemplate-vim-customize* You can modify template directory for your-self templates: > let g:sonictemplate_vim_template_dir = '/path/to/your/template/directory' < or > let g:sonictemplate_vim_template_dir = [ \ '$HOME/.vim/template', \ '/path/to/another/template/directory' \] < You can override default template to make same structures. For example, a default C language template 'main' is like following. > #include int main(int argc, char* argv[]) { {{_cursor_}} return 0; } This template is stored in 'sonictemplate-vim/template/c/base-main.c'. If you store base-main.c in another template directory that is specified |g:sonictemplate_vim_template_dir|, it will be overrided with your's one. ============================================================================== UNITE SOURCE *sonictemplate--vimunitesource* You can use unite source for sonictemplate. For example, > :Unite sonictemplate < ============================================================================== WRITE YOUR TEMPLATE *sonictemplate-vim-writetemplate* Templates are stored in the directory that "g:sonictemplate_vim_template_dir" variable specified. On unix, directory structure is following. Note that I'm using pathogen-vim. > ~/.vim/bundle/sonictemplate-vim plugin sonictemplate.vim doc sonictemplate.txt template go ... filetype go base-main.go ... base main base-package.go ... base package snip-goroutine.go ... snippet for goroutine ... perl ... filetype perl base-package.pl ... base package base-script.pl ... base script snip-dbi-connect-sqlite.pl ... snippet for DBI/SQLite ... _ ... global template base-foo.go ... base foo snip-foo.go ... snip foo < Global template '_' can be applied to any filetypes. 1. The filename have following rule. |[kind]|-|[name]|.|[extension]| |[kind]| 'base' or 'snip' should be used. 'base' is used when buffer is empty. |[name]| template name Words in the name must join with '-'. |[extension]| file name extension like ".c". If several extensions are exists in same directory, the first found is used. 2. Template can have some keywords. |{{_name_}}| the filename without extension. If you are opening "foo.pl" for perl, {{_name_}} become "foo". |{{_cursor_}}| : cursor position. When expanded template, cursor will be moved to there. |{{_input_:var}}| : ask the value of "var". You'll be asked "var: " in prompt. |{{_expr_:xxx}}| : expression in vimscript. For example: "Current Time:|{{_expr_:strftime('%c')}}|" will be > Current Time: 2011/10/27 20:19:00 < |{{_if_:expr;foo;bar}}| : ternary operator For example: When today is saturday, "Today is |{{_if_:strftime('%w')%6;OrdinaryDay;Holiday}}|" will be > Today is Holiday < |{{_inline_}}| : inline expand. If it's contained, template will be expanded as one line. This operator affect to snip templates. For example: When type "t" on "left _ right" (_ is cursor), > foo bar < Above template will be expanded as oneline > left foobar right < |{{_filter_:xxx}}| : template filter If it's contained, some templates are listed prior. For example: When `base-helloworld.go` define filter as 'foo', `snip-foo.go` is located first than `snip-bar.go` in the template list > base-helloworld.go snip-foo.go snip-bar.go < ============================================================================== vim:tw=78:ts=8:ft=help:norl:noet:fen:fdl=0: