summaryrefslogtreecommitdiff
path: root/tools/vim/plugin/template.vim
diff options
context:
space:
mode:
authorNicolas Schodet2008-01-28 09:29:22 +0100
committerNicolas Schodet2008-01-28 09:29:22 +0100
commit3657056cc302efd98056fd2349776781759b1229 (patch)
treeee03c38d6934161d9c90c005ab2dd25874a1f2ff /tools/vim/plugin/template.vim
parenta28cd43e49a4337f19ce89dd4a61d21fa0260b33 (diff)
* tools/vim:
- added APBTeam vim setup and tools.
Diffstat (limited to 'tools/vim/plugin/template.vim')
-rw-r--r--tools/vim/plugin/template.vim136
1 files changed, 136 insertions, 0 deletions
diff --git a/tools/vim/plugin/template.vim b/tools/vim/plugin/template.vim
new file mode 100644
index 00000000..811ebaa0
--- /dev/null
+++ b/tools/vim/plugin/template.vim
@@ -0,0 +1,136 @@
+" Name: ni-template
+" Author: Nicolas Schodet <nico at ni.fr.eu.org>
+" Last Update: 2007-03-29
+" Version: 0.84
+" Description: Chargeur de templates.
+" License: Domaine public.
+" Installation: Mettre le script dans &runtimepath/plugin, et les templates
+" dans &runtimepath/templates.
+"
+" Appeler la commande :Template [filetype] pour charger un
+" template. filetype est optionnel, il est detecté sinon.
+"
+" La commande :TemplateHeader essaye de détecter si le fichier
+" est un en-tête (h au lieu de c, hpp au lieu de cpp).
+"
+" Exemple : Mettre le script dans ~/.vim/plugin, et les
+" templates dans ~/.vim/templates. Mettre une autocommande :
+" au BufNewFile * TemplateHeader
+"
+" Usage: Les fichiers de templates peuvent contenir des expressions
+" remplacées par le script :
+" @DATE@ : Tue Jan 28 00:42:47 2003
+" @ISODATE@ : 2003-01-28
+" @YEAR@ : 2003
+" @FILE@ : template.vim
+" @FILEBASE@ : template
+" @FILECAP@ : TEMPLATE_VIM
+" @FILEDEF@ : template_vim
+" @PATH@ : path/to/template.vim
+" @PATHBASE@ : path/to/template
+" @PATHCAP@ : PATH_TO_TEMPLATE_VIM
+" @PATHDEF@ : path_to_template_vim
+" @AUTHOR@ : valeur de g:fullname
+" @EMAIL@ : valeur de g:email
+" @NICK@ : valeur de g:nick
+" @WEB@ : valeur de g:web
+" @COPYRIGHT@ : valeur de g:copyright
+" @%...@ : utilise expand pour construire un nom de fichier
+" @!...@ : evalue une expression VIM
+" @=...@ : evalue une expression VIM et remplace par le
+" résultat.
+
+if exists('g:ni_template_plugin') | finish | endif
+let g:ni_template_plugin = 1
+
+function! s:Eval(expr)
+ exe 'return' a:expr
+endf
+
+function! s:Exec(expr)
+ exe a:expr
+ return ''
+endf
+
+" Find a template file for a given filetype.
+function! s:Template_find_file(ft)
+ if exists ('b:template_variant')
+ let template_file = globpath (&runtimepath, 'templates/' . b:template_variant . '.' . a:ft)
+ if filereadable (template_file)
+ return template_file
+ endif
+ endif
+ if exists ('g:template_variant')
+ let template_file = globpath (&runtimepath, 'templates/' . g:template_variant . '.' . a:ft)
+ if filereadable (template_file)
+ return template_file
+ endif
+ endif
+ let template_file = globpath (&runtimepath, 'templates/default.' . a:ft)
+ return template_file
+endf
+
+" Insert template.
+function! s:Template(...)
+ let dellast = line ('$') == 1 && getline ('$') == ''
+ let ft = (a:0) ? (a:1) : (strlen (&ft) ? &ft : 'default')
+ let template_file = s:Template_find_file (ft)
+ if filereadable (template_file)
+ silent exe '0r ' . template_file
+ keepjumps silent %s/@=\([^@]*\)@/\=s:Eval(submatch(1))/ge
+ keepjumps silent %s/@!\([^@]*\)@/\=s:Exec(submatch(1))/ge
+ keepjumps silent %s/@\(%[^@]*\)@/\=expand(submatch(1))/ge
+ silent exe 'keepjumps %s/@DATE@/' . strftime ('%c') . '/ge'
+ silent exe 'keepjumps %s/@ISODATE@/' . strftime ('%Y-%m-%d') . '/ge'
+ silent exe 'keepjumps %s/@YEAR@/' . strftime ('%Y') . '/ge'
+ let file = expand ('%:t')
+ silent exe 'keepjumps %s/@FILE@/' . file . '/ge'
+ silent exe 'keepjumps %s/@FILEBASE@/' . expand ('%:t:r') . '/ge'
+ silent exe 'keepjumps %s/@FILECAP@/' . toupper (substitute (file, '\.', '_', 'g')) . '/ge'
+ silent exe 'keepjumps %s/@FILEDEF@/' . substitute (file, '\.', '_', 'g') . '/ge'
+ let path = expand ('%')
+ silent exe 'keepjumps %s:@PATH@:' . path . ':ge'
+ silent exe 'keepjumps %s:@PATHBASE@:' . expand ('%:r') . ':ge'
+ silent exe 'keepjumps %s:@PATHCAP@:' . toupper (substitute (path, '[/\.]', '_', 'g')) . ':ge'
+ silent exe 'keepjumps %s:@PATHDEF@:' . substitute (path, '[/\.]', '_', 'g') . ':ge'
+ if exists ('g:fullname')
+ silent exe 'keepjumps %s/@AUTHOR@/' . g:fullname . '/ge'
+ endif
+ if exists ('g:email')
+ silent exe 'keepjumps %s/@EMAIL@/' . g:email . '/ge'
+ endif
+ if exists ('g:nick')
+ silent exe 'keepjumps %s/@NICK@/' . g:nick . '/ge'
+ endif
+ if exists ('g:web')
+ silent exe 'keepjumps %s/@WEB@/' . g:web . '/ge'
+ endif
+ if exists ('g:copyright')
+ silent exe 'keepjumps %s/@COPYRIGHT@/' . g:copyright . '/ge'
+ endif
+ if dellast
+ keepjumps $d _
+ endif
+ keepjumps 0
+ endif
+endf
+
+" Detect headers files, then call Template().
+function! s:TemplateHeader()
+ if &filetype == 'c' && expand ('%') =~ '\.h$'
+ call s:Template ('h')
+ elseif &filetype == 'cpp' && expand ('%') =~ '\.\(h\|H\|hh\|hxx\|hpp\|tcc\|inl\)$'
+ call s:Template ('hpp')
+ else
+ call s:Template ()
+ endif
+endfunction
+
+if !exists(':Template')
+ command -nargs=? Template :call s:Template (<f-args>)
+endif
+
+if !exists(':TemplateHeader')
+ command -nargs=0 TemplateHeader :call s:TemplateHeader ()
+endif
+