UltiSnips - The ultimate snippet solution for Vim. Send pull requests to SirVer/ultisnips!
Python Vim script Other
Clone or download
Latest commit 6fdc364 Apr 30, 2018
Failed to load latest commit information.
.github Update issue_template.md (#959) Apr 9, 2018
after/plugin Remove bootstrap.vim. Simplify startup. Jul 11, 2015
autoload Disable auto detecting changes to snippet files on expansion (#967) Apr 10, 2018
ctags Support TagBar for snippets files Jul 6, 2014
doc feature/docs-improvement-of-is-expandable-func (#975) Apr 30, 2018
docker Remove travis caching and avoid rate limiting. (#962) Apr 9, 2018
ftdetect Improve/simplify filetype handling for buffers (#745) Sep 7, 2016
ftplugin Disable auto detecting changes to snippet files on expansion (#967) Apr 10, 2018
plugin autotrigger: make snippets expand without <tab> Oct 9, 2015
pythonx/UltiSnips Rename some variables for added clarity. (#977) Apr 16, 2018
rplugin/python3/deoplete/sources Mark source as volatile (#844) Mar 30, 2018
syntax syntax fix for subdirs Sep 7, 2016
test Towards using an internal buffer for all snippet updates. (#973) Apr 14, 2018
utils Applied pyformat on entire codebase. Jan 20, 2015
.gitignore ignore .ropeproject Mar 28, 2016
.travis.yml Remove travis caching and avoid rate limiting. (#962) Apr 9, 2018
CONTRIBUTING.md Adds a CONTRIBUTING.md file. Apr 5, 2018
COPYING.txt Added a license file. Oct 29, 2013
ChangeLog Updated release date for 3.1. Mar 30, 2018
Dockerfile Remove travis caching and avoid rate limiting. (#962) Apr 9, 2018
Dockerfile.repro Rename scripts -> docker. Make repro more useful. Apr 5, 2018
Makefile Adds a CONTRIBUTING.md file. Apr 5, 2018
README.md Mention deoplete as supported. Apr 8, 2018
pylintrc Less verbose pylint errors. Jan 22, 2015
test_all.py Adds a CONTRIBUTING.md file. Apr 5, 2018


Build Status Stories in Ready Gitter


UltiSnips is the ultimate solution for snippets in Vim. It has tons of features and is very fast.

GIF Demo

In this demo I am editing a python file. I first expand the #! snippet, then the class snippet. The completion menu comes from YouCompleteMe, UltiSnips also integrates with deoplete. I can jump through placeholders and add text while the snippet inserts text in other places automatically: when I add Animal as a base class, __init__ gets updated to call the base class constructor. When I add arguments to the constructor, they automatically get assigned to instance variables. I then insert my personal snippet for print debugging. Note that I left insert mode, inserted another snippet and went back to add an additional argument to __init__ and the class snippet was still active and added another instance variable.

The official home of UltiSnips is at https://github.com/sirver/ultisnips. Please add pull requests and issues there.

UltiSnips was started in Jun 2009 by @SirVer. In Dec 2015, maintenance was handed over to @seletskiy.

What can you do with UltiSnips?

  1. Advanced snippets:

Quick Start

This assumes you are using Vundle. Adapt for your plugin manager of choice. Put this into your .vimrc.

" Track the engine.
Plugin 'SirVer/ultisnips'

" Snippets are separated from the engine. Add this if you want them:
Plugin 'honza/vim-snippets'

" Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe.
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"

" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"

UltiSnips comes with comprehensive documentation. As there are more options and tons of features I suggest you at least skim it.


From a gentle introduction to really advanced in a few minutes: The blog posts of the screencasts contain more advanced examples of the things discussed in the videos.

Also the excellent Vimcasts dedicated three episodes to UltiSnips: