vim-templates (vimawesome)
Create files from predefined templates
Plugin 'tibabit/vim-templates'
Plug 'tibabit/vim-templates'
-
TemplateInit
- Takes 0 or more arguments, initializes file with the template and expands all placeholders defined in the template. The argument provided is the name of the template file, in most cases the extension of the file. If no argument is provided file extension is extracted from file name (e.g.:TemplateInit cpp
) -
TemplateExpand
- Does not take any argument, expands all the placeholders present in file. Helpful for updating an existing file
By default auto initialization is set to true, so whenever a new file is created,
the file is automatically initialized if a template matches.
This can be disabled by setting g:tmpl_auto_initialize
to 0
in your .vimrc
.
- Create a file
<template_name>.template
inside a folder which is searched by the plugin( see below), e.g. if you want to create a template file for a c++ main file you can name itcppmain.template
orcppm.template
- Open the file and edit, for example
h.template
/**
* @author : {{NAME}} ({{EMAIL}})
* @created : {{TODAY}}
* @filename : {{FILE}}
*/
#ifndef {{MACRO_GUARD}}
#define {{MACRO_GUARD}}
/* declarations */
#endif /* {{MACRO_GUARD}} */
generates this for a file named header.h
/**
* @author : Vikas Kesarwani ([email protected])
* @created : 07/09/2018
* @filename : header
*/
#ifndef HEADER_H
#define HEADER_H
/* declarations */
#endif /* HEADER_H */
{{NAME}}
,{{EMAIL}}
,{{FILE}}
and{{TODAY}}
defined above are placeholders, which are expanded as soon as you call:TemplateExpand
.- In a new file type
:TemplateInit cppmain
to both place the above content inside the file and expand the placeholders.
The plugin searches for templates as follows
- In folders named
templates
recursively up the directory tree, i.e. first in a directorytemplates
under the current working directory, then in../templates
, then '../../templates', ... - In search paths defined by
g:tmpl_search_paths
in your.vimrc
file - The
templates
folder in this plugin's directory
If you want to add a custom directory to the search path,
e.g. if you placed them inside a templates
directory under $HOME
then
add the following line in your .vimrc
file:
let g:tmpl_search_paths = ['~/templates']
-
The values into which certain placeholders expand may be influenced by settings in your
.vimrc
. For examplePROJECT
expands into the value of the variableg:tmpl_project
. For more details see the list below. -
Other than that the expansion may also be influenced on a per-directory basis. If a matching template file is found in one of the directories of the search path, the plugin also checks whether a file called
tmpl_settings.vim
exists in the same directory. Note, than no other search directories are checked. If this is the case all its settings take preference over the.vimrc
-
For example: In general you want the placeholder
EMAIL
to expand to[email protected]
in your templates, hence you placelet g:tmpl_author_email = '[email protected]'
in your
.vimrc
. In the projects inside the folder$HOME/my_cool_stuff
, however, you want your templates to show the email address[email protected]
. So inside$HOME/templates
you place a file$HOME/my_cool_stuff/tmpl_settings.vim
with contentlet g:tmpl_author_email = '[email protected]'
and all template files in
$HOME/my_cool_stuff
will now haveEMAIL
expanding to the latter value.
The Following placeholders are currently supported by this plugin
DAY
: Day of the week in short form (Mon, Tue, Wed, etc,)DAY_FULL
: Day of the week in full (Monday, Tueseday, etc.)DATE
: Date of the month (01 to 31)MONTH
: Month of the year (01 to 12)MONTH_SHORT
: Short name of the month (Jan, Feb, Mar, etc.)MONTH_FULL
: Full month name (January, February, etc.)YEAR
: current year (2016)TODAY
: Todays date in dd/mm/yyyy formatTIME
: Current time in 24 our formatTIME_12
: Current time in 12 hour formatTIMESTAMP
: Current Timestamp, e.g.: Sunday Nov 27, 2016 15:33:33 IST
NAME
: Name of the author,g:tmpl_author_name
, default :$USER
HOSTNAME
: Name of the host machine,g:tmpl_author_hostname
, default :$HOSTNAME
EMAIL
: Email of the author,g:tmpl_author_email
, default :$USER@$HOSTNAME
FILE
: Basename of the filefilename.ext -> filename
FILEE
: Filename with extensionfilename.ext -> filename.ext
FILEF
: Absolute path of the file/path/to/directory/filename.ext
FILER
: Filepath relative to the current directory (pwd)/relative/to/filename.ext
LICENSE
: License of the project,g:tmpl_license
, default :MIT
LICENSE_FILE
: Reads lincese from license file onto the next line,g:tmpl_license_file
. If no file path is provided then file is read in following order-- LICENSE
- LICENSE.txt
- LICENSE.md
- license.txt
- license.md
COPYRIGHT
: Copyright message,g:tmpl_copyright
, default :Copyright (c) g:tmpl_company
PROJECT
: Name of the project,g:tmpl_project
, default: not expandedCOMPANY
: Name of the company,g:tmpl_company
, default: not expandedMACRO_GUARD
: Macro guard for use in c/c++ files.filename.h -> FILENAME_H
. All dots(.) and dashes (-) present in filename are converted into underscores (_).MACRO_GUARD_FULL
: Same asMACRO_GUARD
, except relative path is used in place of file name. e.g.relative/to/filename.h -> RELATIVE_TO_FILENAME_H
CLASS
: class name, same asFILE
CAMEL_CLASS
: class name converted to camel case (first letters of words capitalized and underscores removed)CURSOR
: This is a spacial placeholder, it does not expand into anything but the cursor is placed at this location after the template expansion