Go to file
John Szakmeister 8b2115ec26 Fix #171: UltiSnips crashes in new file with text containing 0x80 char
It turns out that vim.eval() will attempt to do Unicode conversion and
can fail when raw bytes are present in the unnamed register.  To avoid
this problem, let's not carry the value across the bridge, and instead
store the cached value in Vim directly.  This successfully sidesteps the
issue entirely, and provides the correct save and restore behavior.

This also adds a test case for the issue.  Since expansion can finish
(despite the errors), the test has to capture the error messages and
examine them for a failure.
2014-11-21 06:09:49 -05:00
after/plugin after script maps Keys again. Needed some refactorings. This fixes supertab integration and closes #212. 2014-02-17 08:15:04 +01:00
autoload Map <c-r> in select mode 2014-10-29 18:42:58 +01:00
ctags Support TagBar for snippets files 2014-07-05 19:36:38 -07:00
doc Support for sw=0 in newer Vim versions. 2014-10-11 15:23:34 +02:00
ftdetect Change indent level to 3(?!) spaces. 2014-09-03 07:58:13 -07:00
ftplugin Tweak the ftplugin 2014-08-26 01:03:15 -07:00
plugin Brought back snipMate compatibility file. We cannot rely on people tracking vim-snippets to have the renmamed version of this available there. 2014-04-30 07:09:08 +02:00
pythonx/UltiSnips Fix #171: UltiSnips crashes in new file with text containing 0x80 char 2014-11-21 06:09:49 -05:00
syntax Fix highlighting of nested tab stops 2014-08-05 17:21:35 -07:00
test Fix #171: UltiSnips crashes in new file with text containing 0x80 char 2014-11-21 06:09:49 -05:00
utils Remove tool that converts snipMate snippets. As support is now build into ultisnips, this is no longer needed. 2014-04-30 07:10:39 +02:00
.bzrignore Ignore .bzr-repo 2010-03-05 14:31:40 +01:00
.gitignore Fixed ignored list in .gitignore 2011-12-30 08:20:54 +01:00
ChangeLog Update ChangeLog. 2014-03-22 11:06:24 +01:00
COPYING.txt Added a license file. 2013-10-29 07:22:06 +01:00
pylintrc Dedent visual line selections before using them. 2014-02-19 21:49:33 +01:00
README.md README: adapt to Vundle interface change 2014-04-15 08:47:51 -07:00
test_all.py Test refactorings. 2014-07-24 08:18:12 +02:00

UltiSnips

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 neocomplete. 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.

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.

Screencasts

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.