Skip to content
This repository

snipMate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim.

branch: master


SnipMate aims to provide support for textual snippets, similar to TextMate or other Vim plugins like UltiSnips. For example, in C, typing for<tab> could be expanded to

for (i = 0; i < count; i++) {
    /* code */

with successive presses of tab jumping around the snippet.

Originally authored by Michael Sanders, SnipMate was forked in 2011 after a stagnation in development. This fork is currently maintained by Rok Garbas, Marc Weber, and Adnan Zafar.

Installing SnipMate

We recommend one of the following methods for installing SnipMate and its dependencies. SnipMate depends on vim-addon-mw-utils and tlib. Since SnipMate does not ship with any snippets, we suggest looking at the vim-snippets repository.

  • Using VAM, add vim-snippets to the list of packages to be installed.

  • Using Pathogen, run the following commands:

    % cd ~/.vim/bundle
    % git clone
    % git clone
    % git clone
    # Optional:
    % git clone
  • Using Vundle, add the following to your vimrc then run :BundleInstall

      Bundle "MarcWeber/vim-addon-mw-utils"
      Bundle "tomtom/tlib_vim"
      Bundle "garbas/vim-snipmate"
      " Optional:
      Bundle "honza/vim-snippets"


How does SnipMate determine which snippets to load? How can I separate, for example, my Rails snippets from my Ruby snippets?

Primarily SnipMate looks at the 'filetype' and 'syntax' settings. Taking "scopes" from these options, it looks in each snippets/ directory in 'runtimepath' for files named scope.snippets, scope/*.snippets, or scope_*.snippets.

However we understand this may not allow for the flexibility desired by some languages. For this we provide two options: scope aliases and the :SnipMateLoadScope command. Scope aliases simply say "whenever this scope is loaded, also load this other scope:

let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['ruby'] = 'ruby,rails'

will load the ruby-rails scope whenever the ruby scope is active. The :SnipMateLoadScope foo command will always load the foo scope in the current buffer. The vim-rails plugin automatically does :SnipMateLoadScope rails when editing a Rails project for example.

Release Notes


  • Implement simple caching
  • Remove expansion guards
  • Fix bug with mirrors in the first column
  • Fix bug with tabs in indents (#143)
  • Fix bug with mirrors in placeholders
  • Fix reading single snippet files
  • Fix the use of the visual map at the end of a line
  • Add :SnipMateLoadScope command and buffer-local scope aliases
  • Load <scope>_*.snippets files

0.87 - 2014-01-04

  • Stop indenting empty lines when expanding snippets
  • Support extends keyword in .snippets files
  • Fix visual placeholder support
  • Add zero tabstop support
  • Support negative 'softtabstop'
  • Add g:snipMate_no_default_aliases option
  • Add snipMateTrigger for triggering an expansion inside a snippet
  • Add snipMate#CanBeTriggered() function
Something went wrong with that request. Please try again.