cae27fba5c
In py2 we could get by with attempting to encode/decode a string and if it failed just ignore and return. Unfortunately on py3 a string decodes to a bytearray and a bytearray encodes to a string. We can't simply return the original object when we fail. We choose replace for handling bytes we don't understand. Test case (using python3 for UltiSnips): open a new file :set encoding=utf-8 qa<Backspace>q "ap Warning: this test case makes it very difficult to exit vim cleanly and save files! Signed-off-by: Andrew Ruder <andrew.ruder@elecsyscorp.com> |
||
---|---|---|
after/plugin | ||
autoload | ||
doc | ||
ftdetect | ||
ftplugin | ||
plugin | ||
pythonx/UltiSnips | ||
syntax | ||
utils | ||
.bzrignore | ||
.gitignore | ||
ChangeLog | ||
COPYING.txt | ||
pylintrc | ||
README.md | ||
test.py |
UltiSnips
UltiSnips is the ultimate solution for snippets in Vim. It has tons of features and is very fast.
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.
Bundle 'SirVer/ultisnips'
" Snippets are separated from the engine. Add this if you want them:
Bundle '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.