mustache and handlebars mode for vim
====================================

A vim plugin for working with [mustache][mustache] and
[handlebars][handlebars] templates. It has:

 - syntax highlighting
 - matchit support
 - mustache abbreviations (optional)
 - section movement mappings `[[` and `]]`
 - text objects `ie` (inside element) and `ae` (around element)

**Note**: for compatibility reason #7, we've renamed the repo name from
`vim-mode` to `vim-mustache-handlebars`.

### Install for pathogen

    cd ~/.vim/
    git clone git://github.com/mustache/vim-mustache-handlebars.git bundle/mustache
    vim bundle/mustache/example.mustache

Get [pathogen][pathogen].

### Install for vundle

Add `Plugin 'mustache/vim-mustache-handlebars'` to your `.vimrc` and do a
`:PluginInstall`.

### Manually Install

    cd ~/.local/src
    git clone git://github.com/mustache/vim-mustache-handlebars.git mustache.vim
    cp -R mustache.vim/syntax/* ~/.vim/syntax/
    cp -R mustache.vim/ftdetect/* ~/.vim/ftdetect/
    cp -R mustache.vim/ftplugin/* ~/.vim/ftplugin/
    vim mustache.vim/example.mustache

### Mustache Abbreviations

You can activate mustache abbreviations by putting this line in your `.vimrc`:
`let g:mustache_abbreviations = 1`

Now you get a set of convenient abbreviations. Underscore `_` indicates where
your cursor ends up after typing an abbreviation:
 - `{{` => `{{_}}`
 - `{{{` => `{{{_}}}`
 - `{{!` => `{{!_}}`
 - `{{>` => `{{>_}}`
 - `{{<` => `{{<_}}`
 - `{{#` produces

   ```
   {{# _}}
   {{/}}
   ```
 - `{{if` produces

   ```
   {{#if _}}
   {{/if}}
   ```
 - `{{ife` produces

   ```
   {{#if _}}
   {{else}}
   {{/if}}
   ```

### Section movement mappings

Following the vim convention of jumping from section to section, `[[` and `]]`
mappings are implemented for easier movement between mustache tags.

 - `]]` jumps to the first following tag
 - `[[` jumps to the first previous tag

Count with section movements is supported:

 - `2]]` jumps to the second next tag

### Text objects

Vim has a very powerful concept of "text objects". If you aren't using text objects,
you can get familiar with it on [this vim help
link](http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects). Learning
text objects really speeds up the vim workflow.

In that spirit, this plugin defines 2 text objects:
 - `ie` a mnemonic for `inside element`, selects all the text inside the
   mustache tag.
   For example, when used with `vie` it will visually select the
   bold text in the following snippets: {{**some_variable**}},
   {{{**different_variable**}}}.
 - `ae` a mnemonic for `around element`, selects the whole mustache tag,
   including the curly braces.
   Example, `vae` visually selects the bold text in the following
   snippets: **{{some_variable}}** or **{{{another_variable}}}**.

Here are other usage examples:
 - `dae` - deletes the whole mustache tag, including the curly braces
 - `die` - deletes **inside** the mustache tag, leaving only curly braces
 - `yae` - "yanks" the whole mustache tag - with curly braces
 - `cie` - deletes **inside** the mustache tag and goes in insert mode

`ie` and `ae` text objects are enabled by default. To disable them, put the
following in your `.vimrc`:

    let g:mustache_operators = 0

## Maintainers

* [Bruno Michel](http://github.com/nono)
* [Bruno Sutic](http://github.com/bruno-)
* [Juvenn Woo](http://github.com/juvenn)

This is combined work from
[juvenn/mustache.vim](http://github.com/juvenn/mustache.vim) and
[nono/vim-handlebars](http://github.com/nono/vim-handlebars).

----

Thanks [@5long](http://github.com/5long) for adding matchit support.

You're encouraged to propose ideas or have discussions via github
issues.

[mustache]: http://mustache.github.io
[handlebars]: http://handlebarsjs.com
[pathogen]: https://github.com/tpope/vim-pathogen
