From 24b08086bc6089289c32775842ade26144271695 Mon Sep 17 00:00:00 2001 From: Max Bucknell Date: Sun, 11 Jan 2015 09:44:19 +0000 Subject: [PATCH] Add UltiSnips. --- vim/vim.symlink/bundle/ultisnips/.bzrignore | 2 + vim/vim.symlink/bundle/ultisnips/.gitignore | 3 + vim/vim.symlink/bundle/ultisnips/COPYING.txt | 674 ++++++++ vim/vim.symlink/bundle/ultisnips/ChangeLog | 138 ++ vim/vim.symlink/bundle/ultisnips/README.md | 60 + .../after/plugin/UltiSnips_after.vim | 13 + .../bundle/ultisnips/autoload/UltiSnips.vim | 188 +++ .../autoload/UltiSnips/bootstrap.vim | 84 + .../ultisnips/autoload/UltiSnips/map_keys.vim | 26 + .../neocomplete/sources/ultisnips.vim | 35 + .../autoload/unite/sources/ultisnips.vim | 56 + .../bundle/ultisnips/ctags/UltiSnips.cnf | 3 + .../bundle/ultisnips/doc/UltiSnips.txt | 1417 +++++++++++++++++ vim/vim.symlink/bundle/ultisnips/doc/demo.gif | Bin 0 -> 1071709 bytes .../bundle/ultisnips/ftdetect/UltiSnips.vim | 14 + .../bundle/ultisnips/ftdetect/snippets.vim | 4 + .../bundle/ultisnips/ftplugin/snippets.vim | 47 + .../bundle/ultisnips/plugin/UltiSnips.vim | 72 + .../plugin/snipMate_compatibility.vim | 15 + vim/vim.symlink/bundle/ultisnips/pylintrc | 268 ++++ .../ultisnips/pythonx/UltiSnips/__init__.py | 13 + .../ultisnips/pythonx/UltiSnips/_diff.py | 219 +++ .../ultisnips/pythonx/UltiSnips/_vim.py | 266 ++++ .../pythonx/UltiSnips/compatibility.py | 109 ++ .../ultisnips/pythonx/UltiSnips/debug.py | 43 + .../pythonx/UltiSnips/indent_util.py | 39 + .../ultisnips/pythonx/UltiSnips/position.py | 65 + .../pythonx/UltiSnips/snippet/__init__.py | 1 + .../UltiSnips/snippet/definition/__init__.py | 4 + .../UltiSnips/snippet/definition/_base.py | 229 +++ .../UltiSnips/snippet/definition/snipmate.py | 19 + .../UltiSnips/snippet/definition/ultisnips.py | 13 + .../UltiSnips/snippet/parsing/__init__.py | 1 + .../UltiSnips/snippet/parsing/_base.py | 45 + .../UltiSnips/snippet/parsing/_lexer.py | 346 ++++ .../UltiSnips/snippet/parsing/snipmate.py | 39 + .../UltiSnips/snippet/parsing/ultisnips.py | 54 + .../UltiSnips/snippet/source/__init__.py | 10 + .../pythonx/UltiSnips/snippet/source/_base.py | 85 + .../snippet/source/_snippet_dictionary.py | 37 + .../pythonx/UltiSnips/snippet/source/added.py | 13 + .../UltiSnips/snippet/source/file/__init__.py | 1 + .../UltiSnips/snippet/source/file/_base.py | 96 ++ .../UltiSnips/snippet/source/file/_common.py | 11 + .../UltiSnips/snippet/source/file/snipmate.py | 116 ++ .../snippet/source/file/ultisnips.py | 142 ++ .../pythonx/UltiSnips/snippet_manager.py | 617 +++++++ .../ultisnips/pythonx/UltiSnips/test_diff.py | 186 +++ .../pythonx/UltiSnips/test_position.py | 70 + .../ultisnips/pythonx/UltiSnips/text.py | 79 + .../UltiSnips/text_objects/__init__.py | 14 + .../pythonx/UltiSnips/text_objects/_base.py | 363 +++++ .../UltiSnips/text_objects/_escaped_char.py | 15 + .../pythonx/UltiSnips/text_objects/_mirror.py | 30 + .../UltiSnips/text_objects/_python_code.py | 209 +++ .../UltiSnips/text_objects/_shell_code.py | 71 + .../text_objects/_snippet_instance.py | 126 ++ .../UltiSnips/text_objects/_tabstop.py | 34 + .../UltiSnips/text_objects/_transformation.py | 150 ++ .../UltiSnips/text_objects/_viml_code.py | 18 + .../pythonx/UltiSnips/text_objects/_visual.py | 58 + .../ultisnips/pythonx/UltiSnips/vim_state.py | 129 ++ .../bundle/ultisnips/syntax/snippets.vim | 208 +++ .../ultisnips/syntax/snippets_snipmate.vim | 47 + .../bundle/ultisnips/test/__init__.py | 0 .../bundle/ultisnips/test/constant.py | 24 + .../ultisnips/test/test_AnonymousExpansion.py | 54 + .../bundle/ultisnips/test/test_Chars.py | 196 +++ .../bundle/ultisnips/test/test_Completion.py | 30 + .../bundle/ultisnips/test/test_Editing.py | 64 + .../bundle/ultisnips/test/test_Expand.py | 55 + .../bundle/ultisnips/test/test_Fixes.py | 46 + .../bundle/ultisnips/test/test_Folding.py | 42 + .../bundle/ultisnips/test/test_Format.py | 131 ++ .../ultisnips/test/test_Interpolation.py | 375 +++++ .../ultisnips/test/test_ListSnippets.py | 30 + .../bundle/ultisnips/test/test_Mirror.py | 193 +++ .../bundle/ultisnips/test/test_Movement.py | 60 + .../ultisnips/test/test_MultipleMatches.py | 59 + .../ultisnips/test/test_ParseSnippets.py | 212 +++ .../bundle/ultisnips/test/test_Plugin.py | 88 + .../bundle/ultisnips/test/test_Recursive.py | 211 +++ .../bundle/ultisnips/test/test_Selection.py | 93 ++ .../bundle/ultisnips/test/test_SnipMate.py | 120 ++ .../ultisnips/test/test_SnippetOptions.py | 255 +++ .../ultisnips/test/test_SnippetPriorities.py | 145 ++ .../bundle/ultisnips/test/test_TabStop.py | 258 +++ .../ultisnips/test/test_Transformation.py | 172 ++ .../ultisnips/test/test_UltiSnipFunc.py | 142 ++ .../bundle/ultisnips/test/test_Visual.py | 141 ++ vim/vim.symlink/bundle/ultisnips/test/util.py | 15 + .../bundle/ultisnips/test/vim_interface.py | 247 +++ .../bundle/ultisnips/test/vim_test_case.py | 423 +++++ vim/vim.symlink/bundle/ultisnips/test_all.py | 157 ++ .../bundle/ultisnips/utils/get_tm_snippets.py | 148 ++ 95 files changed, 11745 insertions(+) create mode 100644 vim/vim.symlink/bundle/ultisnips/.bzrignore create mode 100644 vim/vim.symlink/bundle/ultisnips/.gitignore create mode 100644 vim/vim.symlink/bundle/ultisnips/COPYING.txt create mode 100644 vim/vim.symlink/bundle/ultisnips/ChangeLog create mode 100644 vim/vim.symlink/bundle/ultisnips/README.md create mode 100644 vim/vim.symlink/bundle/ultisnips/after/plugin/UltiSnips_after.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/bootstrap.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/map_keys.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/autoload/neocomplete/sources/ultisnips.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/autoload/unite/sources/ultisnips.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/ctags/UltiSnips.cnf create mode 100644 vim/vim.symlink/bundle/ultisnips/doc/UltiSnips.txt create mode 100644 vim/vim.symlink/bundle/ultisnips/doc/demo.gif create mode 100644 vim/vim.symlink/bundle/ultisnips/ftdetect/UltiSnips.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/ftdetect/snippets.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/ftplugin/snippets.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/plugin/UltiSnips.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/plugin/snipMate_compatibility.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/pylintrc create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/_diff.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/_vim.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/compatibility.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/debug.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/indent_util.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/position.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/definition/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/definition/_base.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/definition/snipmate.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/definition/ultisnips.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/parsing/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/parsing/_base.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/parsing/_lexer.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/parsing/snipmate.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/parsing/ultisnips.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/_base.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/_snippet_dictionary.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/added.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/_base.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/_common.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/snipmate.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet/source/file/ultisnips.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/snippet_manager.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/test_diff.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/test_position.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_base.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_escaped_char.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_mirror.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_python_code.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_shell_code.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_snippet_instance.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_tabstop.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_transformation.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_viml_code.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/text_objects/_visual.py create mode 100644 vim/vim.symlink/bundle/ultisnips/pythonx/UltiSnips/vim_state.py create mode 100644 vim/vim.symlink/bundle/ultisnips/syntax/snippets.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/syntax/snippets_snipmate.vim create mode 100644 vim/vim.symlink/bundle/ultisnips/test/__init__.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/constant.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_AnonymousExpansion.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Chars.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Completion.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Editing.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Expand.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Fixes.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Folding.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Format.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Interpolation.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_ListSnippets.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Mirror.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Movement.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_MultipleMatches.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_ParseSnippets.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Plugin.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Recursive.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Selection.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_SnipMate.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_SnippetOptions.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_SnippetPriorities.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_TabStop.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Transformation.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_UltiSnipFunc.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/test_Visual.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/util.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/vim_interface.py create mode 100644 vim/vim.symlink/bundle/ultisnips/test/vim_test_case.py create mode 100755 vim/vim.symlink/bundle/ultisnips/test_all.py create mode 100755 vim/vim.symlink/bundle/ultisnips/utils/get_tm_snippets.py diff --git a/vim/vim.symlink/bundle/ultisnips/.bzrignore b/vim/vim.symlink/bundle/ultisnips/.bzrignore new file mode 100644 index 0000000..a64bfd0 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/.bzrignore @@ -0,0 +1,2 @@ +doc/tags +.bzr-repo diff --git a/vim/vim.symlink/bundle/ultisnips/.gitignore b/vim/vim.symlink/bundle/ultisnips/.gitignore new file mode 100644 index 0000000..bb169b4 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/.gitignore @@ -0,0 +1,3 @@ +*.pyc +*.swp +doc/tags diff --git a/vim/vim.symlink/bundle/ultisnips/COPYING.txt b/vim/vim.symlink/bundle/ultisnips/COPYING.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/COPYING.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/vim/vim.symlink/bundle/ultisnips/ChangeLog b/vim/vim.symlink/bundle/ultisnips/ChangeLog new file mode 100644 index 0000000..7ebb301 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/ChangeLog @@ -0,0 +1,138 @@ +version 3.0 (02-Mar-2014): + - Organisational changes: The project is now hosted on github. Snippets are + now shipped separately - please track honza/vim-snippets. + - UltiSnips is now a drop in replacement for snipMate - it parses snipMate + snippets and expands them emulating snipMates smaller feature set. + - Filetype tab completion for UltiSnipsEdit. + - UltiSnipsEdit now only edits private snippet files. Use UltiSnipsEdit! if + you want to edit shipped files. + - New option 's' which strips trailing whitespace before jumping to next + tabstop + - New option 'a' which converts non-ascii characters into ascii characters + in transformations. + - New keyword in snippet files: priority defines which snippets should + overwrite others. This deprecates the '!' option. + *UltiSnips-adding-snippets* + - Remove common whitespace of visual line selections before inserting in an + indented tabstop. + - Support for overwriting the snippet directory name on a per buffer basis + to support per project snippets. *UltiSnips-snippet-search-path* + - The keymaps for jumping in snippets are now only mapped when a snippet is + active, allowing them to be used for something else otherwise. + - Expanding and jumping no longer overwrites the unnamed register. + - Integration with Valloric/YouCompleteMe and Shougo/neocomplete.vim. + - Other plugins can add sources for snippets to create snippets on the fly. + *UltiSnips-extending* + - Vim functions now indicates if it did any work. + *UltiSnips-trigger-functions* + - For python extensions: UltiSnips adds itself to the sys.path and can be + easily imported if it is available. *UltiSnips-python-module-path* + - A new function giving programmatic access to the snippets currently + available for expansion for other plugins integrating with UltiSnips. + *UltiSnips_SnippetsInCurrentScope* + - New or improved snippets (now in a different repo): all, bib, c, cpp, cs, + d, django, eruby, go, haskell, html, html, htmljinja, java, javascript, + js, ledger, ocaml, perl, php, puppet, python, ruby, scss, sh, tex, vim, + xml, zsh. + +version 2.2 (01-Sep-2012): + - Support to silence Python-not-found warnings. *UltiSnips-python-warning* + - Matchit support for snippet files. + - Improvements to syntax file. + - Various smaller bug fixes. + - New command to manually add a filetype to the list for the current + buffer. *:UltiSnipsAddFiletypes* + - New or improved snippets: all, snippets, haskell, bindzone, python, golang, + json, html, coffee, coffee_jasmine, javascript_jasmine, ruby, php, + markdown. + +version 2.1 (14-Feb-2012): + - Python interpolation access to text from visual selection via snip.v. + - Support for transformations of ${VISUAL} texts. + - New or improved snippets: python, tex, texmath, ruby, rails, html, django + +version 2.0 (05-Feb-2012): + - Backwards incompatible change: Support for normal mode editing. Snippets + are no longer exited when leaving insert mode but only by leaving the + text span of the snippets. This allows usage of normal mode commands and + autoformatting. It also increases compatibility with other plugins. + - Backwards incompatible change: Changed glob patterns for snippets to + behave more like Vim *UltiSnips-adding-snippets* + - Backwards incompatible change: Zero Tabstop is no longer removed in + nested snippets + - Support for ${VISUAL:default text} placeholder. *UltiSnips-visual-placeholder* + - Improved handling of utf-8 characters in files and snippet definitions. + - Full support for :py3. UltiSnips now works with python >= 2.6 or >= 3.2. + - New or improved snippets: python, all + +version 1.6 (30-Dec-2011): + - Significant speed improvements and a few bugs fixed. + - Better handling of non ASCII chars in snippets by assuming UTF-8 encoding + when no other information is available. + - Contributions for UltiSnips are now also accepted on GitHub: https://github.com/SirVer/ultisnips/ + - New or improved snippets: ruby, rails, xhtml + +version 1.5 (24-Sep-2011): + - Some critical bug fixes for new vim versions. + - New or improved snippets: tex, texmath, python, jinja2, go, puppet, xhtml + - Configuration of search path for snippets *UltiSnips-snippet-search-path* + - New parser implementation: A little faster, more flexible and less bugged. + +version 1.4 (17-Jul-2011): + - New or improved snippets: php, html, djangohtml, mako, lua + - Snippets are now listed alphabetically by their trigger, no longer in + order of appearance + - Snippet files are now automatically reloaded when they change. + - Support for other directory names for snippets beside + "UltiSnips" *UltiSnips-snippet-search-path* + - Errors are now shown in a scratch window. + - Now fully supports Windows with python >= 2.6. UltiSnips should now work + on all systems that Vim runs on. + - a syntax file was added for snippets files with nice highlighting. + - snippets definition files now have the filetype 'snippets'. It used to be + 'snippet'. + +version 1.3 (14-Feb-2011): + - Erlang snippets (g0rdin) + - Other VimScripts can now define and immediately expand anonymous snippets + ( *UltiSnips_Anon* ) (Ryan Wooden) + - Other VimScripts can now define new snippets via a function + ( *UltiSnips_AddSnippet* ) (Ryan Wooden) + - New Snippets for eruby and rails (Ches Martin). + - A new Option 't' has been added to snippets that avoid expanding tabstops. + Be also more consistent with how indenting is handled. (Ryan Wooden) + - Added a ftplugin script for .snippets files. Syntax highlighting still + missing. (Rupa Deadwyler) + - Added UltiSnipsReset and UltiSnipsEdit (Idea by JCEB) + +version 1.2 (24-Aug-2010): + - many bugs were fixed + - smode mappings for printable characters are now removed before expanding a + snippet. This is configurable. *UltiSnips-warning-smappings* + - all shipped snippets are now fully compatible with UltiSnips + - added support for global snippets which enhance python interpolation even + more *UltiSnips-globals* + - added support for multi word and regular expression triggers. Very + powerful in combination with python interpolation. + - Python interpolation became much more powerful *UltiSnips-python* + - added support for clearsnippets command *UltiSnips-clearing-snippets* + - added support for option w which is a little more strict than i. + - added support for listing of valid triggers. Defaults to . + - added support for option i (inword expansion) + - extends keyword is now supported on the first line of snippet files. This makes it easy to + define special cases, for example cpp extends c: a cpp trigger is useless + in c, but a c trigger is valuable for cpp. + - UltiSnips now adheres to expandtab and tabstop options of vim + +version 1.1 (21-Jul-2009): + - Made triggers configurable. You can also use the same trigger for + expanding and tabbing. The TextMate configuration and is now + possible. + - Conditional Inserts can now be nested + - Added support for b option. This only considers a snippet at the beginning + of a line ( *UltiSnips-adding-snippets* ) + - Added support for ! option. This overwrites previously defined snippets + with the same tab trigger ( *UltiSnips-adding-snippets* ) + - Support for dotted filetype syntax. Now snippets for more than one filetype + can be active ( *UltiSnips-adding-snippets* ) + diff --git a/vim/vim.symlink/bundle/ultisnips/README.md b/vim/vim.symlink/bundle/ultisnips/README.md new file mode 100644 index 0000000..7dca6c0 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/README.md @@ -0,0 +1,60 @@ +UltiSnips +========= + +UltiSnips is the ultimate solution for snippets in Vim. It has tons of features +and is very fast. + +![GIF Demo](https://raw.github.com/SirVer/ultisnips/master/doc/demo.gif) + +In this demo I am editing a python file. I first expand the `#!` snippet, then +the `class` snippet. The completion menu comes from +[YouCompleteMe](https://github.com/Valloric/YouCompleteMe), UltiSnips also +integrates with [neocomplete](https://github.com/Shougo/neocomplete.vim). 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 . +Please add pull requests and issues there. + +Quick Start +----------- + +This assumes you are using [Vundle](https://github.com/gmarik/Vundle.vim). 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 if you use https://github.com/Valloric/YouCompleteMe. + let g:UltiSnipsExpandTrigger="" + let g:UltiSnipsJumpForwardTrigger="" + let g:UltiSnipsJumpBackwardTrigger="" + + " If you want :UltiSnipsEdit to split your window. + let g:UltiSnipsEditSplit="vertical" + +UltiSnips comes with comprehensive +[documentation](https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt). +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. + +- [Episode 1: What are snippets and do I need them?](http://www.sirver.net/blog/2011/12/30/first-episode-of-ultisnips-screencast/) +- [Episode 2: Creating Basic Snippets](http://www.sirver.net/blog/2012/01/08/second-episode-of-ultisnips-screencast/) +- [Episode 3: What's new in version 2.0](http://www.sirver.net/blog/2012/02/05/third-episode-of-ultisnips-screencast/) +- [Episode 4: Python Interpolation](http://www.sirver.net/blog/2012/03/31/fourth-episode-of-ultisnips-screencast/) + diff --git a/vim/vim.symlink/bundle/ultisnips/after/plugin/UltiSnips_after.vim b/vim/vim.symlink/bundle/ultisnips/after/plugin/UltiSnips_after.vim new file mode 100644 index 0000000..ca885a6 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/after/plugin/UltiSnips_after.vim @@ -0,0 +1,13 @@ +" File: UltiSnips_after.vim +" Author: Holger Rapp +" Description: Called after everything else to reclaim keys (Needed for +" Supertab) +" Last Modified: July 27, 2009 + +if exists('did_UltiSnips_after') || &cp || version < 700 + finish +endif + +call UltiSnips#map_keys#MapKeys() + +let did_UltiSnips_after=1 diff --git a/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips.vim b/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips.vim new file mode 100644 index 0000000..369da5d --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips.vim @@ -0,0 +1,188 @@ +" File: UltiSnips.vim +" Author: Holger Rapp +" Description: The Ultimate Snippets solution for Vim + +if exists('did_UltiSnips_autoload') || &cp || version < 700 + finish +endif +let did_UltiSnips_autoload=1 + +" Define dummy version of function called by autocommand setup in +" ftdetect/UltiSnips.vim and plugin/UltiSnips.vim. +" If the function isn't defined (probably due to using a copy of vim +" without python support) it would cause an error. +function! UltiSnips#FileTypeChanged() +endfunction +function! UltiSnips#CursorMoved() +endfunction +function! UltiSnips#CursorMoved() +endfunction +function! UltiSnips#LeavingBuffer() +endfunction +function! UltiSnips#LeavingInsertMode() +endfunction + +call UltiSnips#bootstrap#Bootstrap() +if !exists("g:_uspy") + " Delete the autocommands defined in plugin/UltiSnips.vim and + " ftdetect/UltiSnips.vim. + augroup UltiSnips + au! + augroup END + augroup UltiSnipsFileType + au! + augroup END + finish +end + +" FUNCTIONS {{{ +function! s:compensate_for_pum() + """ The CursorMovedI event is not triggered while the popup-menu is visible, + """ and it's by this event that UltiSnips updates its vim-state. The fix is + """ to explicitly check for the presence of the popup menu, and update + """ the vim-state accordingly. + if pumvisible() + exec g:_uspy "UltiSnips_Manager._cursor_moved()" + endif +endfunction + +function! UltiSnips#Edit(bang, ...) + if a:0 == 1 && a:1 != '' + let type = a:1 + else + let type = "" + endif + exec g:_uspy "vim.command(\"let file = '%s'\" % UltiSnips_Manager._file_to_edit(vim.eval(\"type\"), vim.eval('a:bang')))" + + if !len(file) + return + endif + + let mode = 'e' + if exists('g:UltiSnipsEditSplit') + if g:UltiSnipsEditSplit == 'vertical' + let mode = 'vs' + elseif g:UltiSnipsEditSplit == 'horizontal' + let mode = 'sp' + elseif g:UltiSnipsEditSplit == 'context' + let mode = 'vs' + if winwidth(0) <= 2 * (&tw ? &tw : 80) + let mode = 'sp' + endif + endif + endif + exe ':'.mode.' '.escape(file, ' ') +endfunction + +function! UltiSnips#AddFiletypes(filetypes) + exec g:_uspy "UltiSnips_Manager.add_buffer_filetypes('" . a:filetypes . ".all')" + return "" +endfunction + +function! UltiSnips#FileTypeComplete(arglead, cmdline, cursorpos) + let ret = {} + let items = map( + \ split(globpath(&runtimepath, 'syntax/*.vim'), '\n'), + \ 'fnamemodify(v:val, ":t:r")' + \ ) + call insert(items, 'all') + for item in items + if !has_key(ret, item) && item =~ '^'.a:arglead + let ret[item] = 1 + endif + endfor + + return sort(keys(ret)) +endfunction + +function! UltiSnips#ExpandSnippet() + exec g:_uspy "UltiSnips_Manager.expand()" + return "" +endfunction + +function! UltiSnips#ExpandSnippetOrJump() + call s:compensate_for_pum() + exec g:_uspy "UltiSnips_Manager.expand_or_jump()" + return "" +endfunction + +function! UltiSnips#ListSnippets() + exec g:_uspy "UltiSnips_Manager.list_snippets()" + return "" +endfunction + +function! UltiSnips#SnippetsInCurrentScope() + let g:current_ulti_dict = {} + exec g:_uspy "UltiSnips_Manager.snippets_in_current_scope()" + return g:current_ulti_dict +endfunction + +function! UltiSnips#SaveLastVisualSelection() + exec g:_uspy "UltiSnips_Manager._save_last_visual_selection()" + return "" +endfunction + +function! UltiSnips#JumpBackwards() + call s:compensate_for_pum() + exec g:_uspy "UltiSnips_Manager.jump_backwards()" + return "" +endfunction + +function! UltiSnips#JumpForwards() + call s:compensate_for_pum() + exec g:_uspy "UltiSnips_Manager.jump_forwards()" + return "" +endfunction + +function! UltiSnips#FileTypeChanged() + exec g:_uspy "UltiSnips_Manager.reset_buffer_filetypes()" + exec g:_uspy "UltiSnips_Manager.add_buffer_filetypes('" . &ft . "')" + return "" +endfunction + + +function! UltiSnips#AddSnippet(trigger, value, description, options, ...) + " Takes the same arguments as SnippetManager.add_snippet. + echoerr "Deprecated UltiSnips#AddSnippet called. Please use UltiSnips#AddSnippetWithPriority." | sleep 1 + exec g:_uspy "args = vim.eval(\"a:000\")" + exec g:_uspy "trigger = vim.eval(\"a:trigger\")" + exec g:_uspy "value = vim.eval(\"a:value\")" + exec g:_uspy "description = vim.eval(\"a:description\")" + exec g:_uspy "options = vim.eval(\"a:options\")" + exec g:_uspy "UltiSnips_Manager.add_snippet(trigger, value, description, options, *args)" + return "" +endfunction + +function! UltiSnips#AddSnippetWithPriority(trigger, value, description, options, filetype, priority) + exec g:_uspy "trigger = vim.eval(\"a:trigger\")" + exec g:_uspy "value = vim.eval(\"a:value\")" + exec g:_uspy "description = vim.eval(\"a:description\")" + exec g:_uspy "options = vim.eval(\"a:options\")" + exec g:_uspy "filetype = vim.eval(\"a:filetype\")" + exec g:_uspy "priority = vim.eval(\"a:priority\")" + exec g:_uspy "UltiSnips_Manager.add_snippet(trigger, value, description, options, filetype, priority)" + return "" +endfunction + +function! UltiSnips#Anon(value, ...) + " Takes the same arguments as SnippetManager.expand_anon: + " (value, trigger="", description="", options="") + exec g:_uspy "args = vim.eval(\"a:000\")" + exec g:_uspy "value = vim.eval(\"a:value\")" + exec g:_uspy "UltiSnips_Manager.expand_anon(value, *args)" + return "" +endfunction + + +function! UltiSnips#CursorMoved() + exec g:_uspy "UltiSnips_Manager._cursor_moved()" +endf + +function! UltiSnips#LeavingBuffer() + exec g:_uspy "UltiSnips_Manager._leaving_buffer()" +endf + +function! UltiSnips#LeavingInsertMode() + exec g:_uspy "UltiSnips_Manager._leaving_insert_mode()" +endfunction +" }}} diff --git a/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/bootstrap.vim b/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/bootstrap.vim new file mode 100644 index 0000000..d5c865c --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/bootstrap.vim @@ -0,0 +1,84 @@ +let s:SourcedFile=expand("") + +function! UltiSnips#bootstrap#Bootstrap() + if exists('s:did_UltiSnips_bootstrap') + return + endif + let s:did_UltiSnips_bootstrap=1 + + if !exists("g:UltiSnipsUsePythonVersion") + let g:_uspy=":py3 " + if !has("python3") + if !has("python") + if !exists("g:UltiSnipsNoPythonWarning") + echo "UltiSnips requires py >= 2.6 or any py3" + endif + unlet g:_uspy + return + endif + let g:_uspy=":py " + endif + let g:UltiSnipsUsePythonVersion = "" + else + if g:UltiSnipsUsePythonVersion == 2 + let g:_uspy=":py " + else + let g:_uspy=":py3 " + endif + endif + + " Expand our path + exec g:_uspy "import vim, os, sys" + exec g:_uspy "sourced_file = vim.eval('s:SourcedFile')" + exec g:_uspy "while not os.path.exists(os.path.join(sourced_file, 'pythonx')): + \ sourced_file = os.path.dirname(sourced_file)" + exec g:_uspy "module_path = os.path.join(sourced_file, 'pythonx')" + exec g:_uspy "vim.command(\"let g:UltiSnipsPythonPath = '%s'\" % module_path)" + exec g:_uspy "if not hasattr(vim, 'VIM_SPECIAL_PATH'): sys.path.append(module_path)" + exec g:_uspy "from UltiSnips import UltiSnips_Manager" +endfunction + +" The trigger used to expand a snippet. +" NOTE: expansion and forward jumping can, but needn't be the same trigger +if !exists("g:UltiSnipsExpandTrigger") + let g:UltiSnipsExpandTrigger = "" +endif + +" The trigger used to display all triggers that could possible +" match in the current position. +if !exists("g:UltiSnipsListSnippets") + let g:UltiSnipsListSnippets = "" +endif + +" The trigger used to jump forward to the next placeholder. +" NOTE: expansion and forward jumping can, but needn't be the same trigger +if !exists("g:UltiSnipsJumpForwardTrigger") + let g:UltiSnipsJumpForwardTrigger = "" +endif + +" The trigger to jump backward inside a snippet +if !exists("g:UltiSnipsJumpBackwardTrigger") + let g:UltiSnipsJumpBackwardTrigger = "" +endif + +" Should UltiSnips unmap select mode mappings automagically? +if !exists("g:UltiSnipsRemoveSelectModeMappings") + let g:UltiSnipsRemoveSelectModeMappings = 1 +end + +" If UltiSnips should remove Mappings, which should be ignored +if !exists("g:UltiSnipsMappingsToIgnore") + let g:UltiSnipsMappingsToIgnore = [] +endif + +" UltiSnipsEdit will use this variable to decide if a new window +" is opened when editing. default is "normal", allowed are also +" "vertical", "horizontal" +if !exists("g:UltiSnipsEditSplit") + let g:UltiSnipsEditSplit = 'normal' +endif + +" A list of directory names that are searched for snippets. +if !exists("g:UltiSnipsSnippetDirectories") + let g:UltiSnipsSnippetDirectories = [ "UltiSnips" ] +endif diff --git a/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/map_keys.vim b/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/map_keys.vim new file mode 100644 index 0000000..a60d00e --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/autoload/UltiSnips/map_keys.vim @@ -0,0 +1,26 @@ +call UltiSnips#bootstrap#Bootstrap() + +function! UltiSnips#map_keys#MapKeys() + if !exists('g:_uspy') + " Do not map keys if bootstrapping failed (e.g. no Python). + return + endif + + " Map the keys correctly + if g:UltiSnipsExpandTrigger == g:UltiSnipsJumpForwardTrigger + + exec "inoremap " . g:UltiSnipsExpandTrigger . " =UltiSnips#ExpandSnippetOrJump()" + exec "snoremap " . g:UltiSnipsExpandTrigger . " :call UltiSnips#ExpandSnippetOrJump()" + else + exec "inoremap " . g:UltiSnipsExpandTrigger . " =UltiSnips#ExpandSnippet()" + exec "snoremap " . g:UltiSnipsExpandTrigger . " :call UltiSnips#ExpandSnippet()" + endif + exec "xnoremap " . g:UltiSnipsExpandTrigger. " :call UltiSnips#SaveLastVisualSelection()gvs" + exec "inoremap " . g:UltiSnipsListSnippets . " =UltiSnips#ListSnippets()" + exec "snoremap " . g:UltiSnipsListSnippets . " :call UltiSnips#ListSnippets()" + + snoremap c + snoremap c + snoremap c + snoremap "_c +endf diff --git a/vim/vim.symlink/bundle/ultisnips/autoload/neocomplete/sources/ultisnips.vim b/vim/vim.symlink/bundle/ultisnips/autoload/neocomplete/sources/ultisnips.vim new file mode 100644 index 0000000..385a779 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/autoload/neocomplete/sources/ultisnips.vim @@ -0,0 +1,35 @@ +let s:save_cpo = &cpo +set cpo&vim + +let s:source = { + \ 'name' : 'ultisnips', + \ 'kind' : 'keyword', + \ 'mark' : '[US]', + \ 'rank' : 8, + \ 'matchers' : + \ (g:neocomplete#enable_fuzzy_completion ? + \ ['matcher_fuzzy'] : ['matcher_head']), + \ 'min_pattern_length' : 1, + \ 'max_candidates' : 20, + \ 'is_volatile': 1, + \ } + +function! s:source.gather_candidates(context) + let suggestions = [] + let snippets = UltiSnips#SnippetsInCurrentScope() + for trigger in keys(snippets) + let description = get(snippets, trigger) + call add(suggestions, { + \ 'word' : trigger, + \ 'menu' : self.mark . ' '. description + \ }) + endfor + return suggestions +endfunction + +function! neocomplete#sources#ultisnips#define() + return s:source +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/vim/vim.symlink/bundle/ultisnips/autoload/unite/sources/ultisnips.vim b/vim/vim.symlink/bundle/ultisnips/autoload/unite/sources/ultisnips.vim new file mode 100644 index 0000000..30e2d83 --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/autoload/unite/sources/ultisnips.vim @@ -0,0 +1,56 @@ +let s:save_cpo = &cpo +set cpo&vim + +let s:unite_source = { + \ 'name': 'ultisnips', + \ 'hooks': {}, + \ 'action_table': {}, + \ 'default_action': 'expand', + \ } + +let s:unite_source.action_table.preview = { + \ 'description' : 'ultisnips snippets', + \ 'is_quit' : 0, + \ } + +function! s:unite_source.action_table.preview.func(candidate) + " no nice preview at this point, cannot get snippet text + let snippet_preview = a:candidate['word'] + echo snippet_preview +endfunction + +let s:unite_source.action_table.expand = { + \ 'description': 'expand the current snippet', + \ 'is_quit': 1 + \} + +function! s:unite_source.action_table.expand.func(candidate) + let delCurrWord = (getline(".")[col(".")-1] == " ") ? "" : "diw" + exe "normal " . delCurrWord . "a" . a:candidate['trigger'] . " " + call UltiSnips#ExpandSnippet() + return '' +endfunction + +function! s:unite_source.gather_candidates(args, context) + let default_val = {'word': '', 'unite__abbr': '', 'is_dummy': 0, 'source': + \ 'ultisnips', 'unite__is_marked': 0, 'kind': 'command', 'is_matched': 1, + \ 'is_multiline': 0} + let snippet_list = UltiSnips#SnippetsInCurrentScope() + let canditates = [] + for snip in items(snippet_list) + let curr_val = copy(default_val) + let curr_val['word'] = snip[0] . " " . snip[1] + let curr_val['trigger'] = snip[0] + call add(canditates, curr_val) + endfor + return canditates +endfunction + +function! unite#sources#ultisnips#define() + return s:unite_source +endfunction + +"unlet s:unite_source + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/vim/vim.symlink/bundle/ultisnips/ctags/UltiSnips.cnf b/vim/vim.symlink/bundle/ultisnips/ctags/UltiSnips.cnf new file mode 100644 index 0000000..c30aa8b --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/ctags/UltiSnips.cnf @@ -0,0 +1,3 @@ +--langdef=UltiSnips +--langmap=UltiSnips:.snippets +--regex-UltiSnips=/^snippet (.*)/\1/s,snippet/ diff --git a/vim/vim.symlink/bundle/ultisnips/doc/UltiSnips.txt b/vim/vim.symlink/bundle/ultisnips/doc/UltiSnips.txt new file mode 100644 index 0000000..6f1b11d --- /dev/null +++ b/vim/vim.symlink/bundle/ultisnips/doc/UltiSnips.txt @@ -0,0 +1,1417 @@ +*UltiSnips.txt* For Vim version 7.0 or later. + + The Ultimate Plugin for Snippets in Vim~ + +UltiSnips *snippet* *snippets* *UltiSnips* + +1. Description |UltiSnips-description| + 1.1 Requirements |UltiSnips-requirements| + 1.2 Acknowledgments |UltiSnips-acknowledgments| +2. Installation and Updating |UltiSnips-installnupdate| +3. Settings & Commands |UltiSnips-settings| + 3.1 Commands |UltiSnips-commands| + 3.2 Triggers |UltiSnips-triggers| + 3.2.1 Using your own trigger functions |UltiSnips-trigger-functions| + 3.2.2 Path to Python Module |UltiSnips-python-module-path| + 3.3 Snippet Search Path |UltiSnips-snippet-search-path| + 3.4 Warning About Select Mode Mappings |UltiSnips-warning-smappings| + 3.5 Functions |UltiSnips-functions| + 3.5.1 UltiSnips#AddSnippetWithPriority |UltiSnips#AddSnippetWithPriority| + 3.5.2 UltiSnips#Anon |UltiSnips#Anon| + 3.5.3 UltiSnips#SnippetsInCurrentScope |UltiSnips#SnippetsInCurrentScope| + 3.6 Missing python support |UltiSnips-python-warning| +4. Syntax |UltiSnips-syntax| + 4.1 Adding Snippets |UltiSnips-adding-snippets| + 4.1.1 Character Escaping |UltiSnips-character-escaping| + 4.2 Plaintext Snippets |UltiSnips-plaintext-snippets| + 4.3 Visual Placeholder |UltiSnips-visual-placeholder| + 4.4 Interpolation |UltiSnips-interpolation| + 4.4.1 Shellcode |UltiSnips-shellcode| + 4.4.2 VimScript |UltiSnips-vimscript| + 4.4.3 Python |UltiSnips-python| + 4.4.4 Global Snippets |UltiSnips-globals| + 4.5 Tabstops and Placeholders |UltiSnips-tabstops| + 4.6 Mirrors |UltiSnips-mirrors| + 4.7 Transformations |UltiSnips-transformations| + 4.7.1 Replacement String |UltiSnips-replacement-string| + 4.7.2 Demos |UltiSnips-demos| + 4.8 Clearing snippets |UltiSnips-clearing-snippets| +5. UltiSnips and Other Plugins |UltiSnips-other-plugins| + 5.1 Existing Integrations |UltiSnips-integrations| + 5.2 Extending UltiSnips |UltiSnips-extending| +6. Helping Out |UltiSnips-helping| +7. Contact |UltiSnips-contact| +8. Contributors |UltiSnips-contributors| + +This plugin only works if 'compatible' is not set. +{Vi does not have any of these features} +{only available when |+python| or |+python3| have been enabled at compile time} + + +============================================================================== +1. Description *UltiSnips-description* + +UltiSnips provides snippet management for the Vim editor. A snippet is a short +piece of text that is either re-used often or contains a lot of redundant +text. UltiSnips allows you to insert a snippet with only a few key strokes. +Snippets are common in structured text like source code but can also be used +for general editing like, for example, inserting a signature in an email or +inserting the current date in a text file. + +UltiSnips was developed using the TDD (Test-driven development) philosophy. +This ensures that features do not disappear and bugs do not reappear after +they have been fixed. + +On my blog, http://www.sirver.net, I posted several short screencasts, which +make a great introduction to UltiSnips, illustrating its features and usage. + +http://www.sirver.net/blog/2011/12/30/first-episode-of-ultisnips-screencast/ +http://www.sirver.net/blog/2012/01/08/second-episode-of-ultisnips-screencast/ +http://www.sirver.net/blog/2012/02/05/third-episode-of-ultisnips-screencast/ +http://www.sirver.net/blog/2012/03/31/fourth-episode-of-ultisnips-screencast/ + + +1.1 Requirements *UltiSnips-requirements* +---------------- + +This plugin works with Vim version 7.0 or later. It only works if the +'compatible' setting is not set. + +This plugin requires python >= 2.6. It has been specifically tested using +python 2.7 and python 3.2 but should theoretically work on all versions of +python >= 2.6. + +The Python 2.x or Python 3.x interface must be available. In other words, Vim +must be compiled with either the |+python| feature or the |+python3| feature. +The following commands show how to test if you have python compiled in Vim. +They print '1' if the python version is compiled in, '0' if not. + +Test if Vim is compiled with python version 2.x: > + :echo has("python") +The python version Vim is linked against can be found with: > + :py import sys; print(sys.version) + +Test if Vim is compiled with python version 3.x: > + :echo has("python3") +The python version Vim is linked against can be found with: > + :py3 import sys; print(sys.version) + +Note that Vim is maybe not using your system-wide installed python version, so +make sure to check the Python version inside of Vim. + +UltiSnips attempts to auto-detect which python version is compiled into Vim. +Unfortunately, in some versions of Vim this detection does not work. +In that case you have to explicitly tell UltiSnips which version to use using +the 'UltiSnipsUsePythonVersion' global variable. + +To use python version 2.x: > + let g:UltiSnipsUsePythonVersion = 2 + +To use python version 3.x: > + let g:UltiSnipsUsePythonVersion = 3 + + +1.2 Acknowledgments *UltiSnips-acknowledgments* +------------------- + +UltiSnips was inspired by the snippets feature of TextMate +(http://macromates.com/), the GUI text editor for Mac OS X. Managing snippets +in Vim is not new. I want to thank Michael Sanders, the author of snipMate, +for some implementation details I borrowed from his plugin and for the +permission to use his snippets. + + +============================================================================= +2. Installation and Updating *UltiSnips-installnupdate* + +The recommended way of getting ultisnips is to track SirVer/ultisnips on +github. The master branch is always stable. + +Using Pathogen: *UltiSnips-using-pathogen* + +If you are a pathogen user, you can track the official mirror of UltiSnips on +github: > + + $ cd ~/.vim/ + $ git submodule add git://github.com/SirVer/ultisnips.git bundle/ultisnips + +If you also want the default snippets, also track > + + $ git submodule add https://github.com/honza/vim-snippets.git + +See the pathogen documentation for more details on how to update a bundle. + + +Using a downloaded packet: *UltiSnips-using-a-downloaded-packet* + +Download the packet and unpack into a directory of your choice. Then add this +directory to your Vim runtime path by adding this line to your vimrc file. > + set runtimepath+=~/.vim/ultisnips_rep + +UltiSnips also needs that Vim sources files from the ftdetect/ directory. +Unfortunately, Vim only allows this directory in the .vim directory. You +therefore have to symlink/copy the files: > + mkdir -p ~/.vim/ftdetect/ + ln -s ~/.vim/ultisnips_rep/ftdetect/* ~/.vim/ftdetect/ + +Restart Vim and UltiSnips should work. To access the help, use > + :helptags ~/.vim/ultisnips_rep/doc + :help UltiSnips + +UltiSnips comes without snippets. The default snippets can be found here: +https://github.com/honza/vim-snippets + +============================================================================= +3. Settings & Commands *UltiSnips-settings* + +3.1 Commands *UltiSnips-commands* +------------ + *:UltiSnipsEdit* +The UltiSnipsEdit command opens a private snippet definition file for the +current filetype. If no snippet file exists, a new file is created. If used as +UltiSnipsEdit! all public snippet files are taken into account too. If +multiple files match the search, the user gets to choose the file. + +There are several variables associated with the UltiSnipsEdit command. + + *g:UltiSnipsEditSplit* +g:UltiSnipsEditSplit Defines how the edit window is opened. Possible + values: + |normal| Default. Opens in the current window. + |horizontal| Splits the window horizontally. + |vertical| Splits the window vertically. + |context| Splits the window vertically or + horizontally depending on context. + + *g:UltiSnipsSnippetsDir* +g:UltiSnipsSnippetsDir + Defines the directory private snippet definition + files are stored in. For example, if the variable + is set to "~/.vim/mydir/UltiSnips" and the current + 'filetype' is "cpp", then :UltiSnipsEdit will open + "~/.vim/mydir/UltiSnips/cpp.snippets". Note that + directories named "snippets" are reserved for + snipMate snippets and cannot be used. + + + *:UltiSnipsAddFiletypes* +The UltiSnipsAddFiletypes command allows for explicit merging of other snippet +filetypes for the current buffer. For example, if you edit a .rst file but +also want the Lua snippets to be available you can issue the command > + + :UltiSnipsAddFiletypes rst.lua + +using the dotted filetype syntax. Order is important, the first filetype in +this list will be the one used for UltiSnipsEdit and the list is +ordered by evaluation priority. Consequently, you might add this to your +ftplugin/rails.vim > + + :UltiSnipsAddFiletypes rails.ruby + +I mention rails first because I want to edit rails snippets when using +UltiSnipsEdit and because rails snippets should overwrite equivalent ruby +snippets. The priority will now be rails -> ruby -> all. If you have some +special programming snippets that should have lower priority than your ruby +snippets you can call > + + :UltiSnipsAddFiletypes ruby.programming + +The priority will then be rails -> ruby -> programming -> all. + +3.2 Triggers *UltiSnips-triggers* +------------ + + *g:UltiSnipsExpandTrigger* *g:UltiSnipsListSnippets* + *g:UltiSnipsJumpForwardTrigger* *g:UltiSnipsJumpBackwardTrigger* +You can define the keys used to trigger UltiSnips actions by setting global +variables. Variables define the keys used to expand a snippet, jump forward +and jump backwards within a snippet, and list all available snippets in the +current expand context. The variables with their default values are: > + g:UltiSnipsExpandTrigger + g:UltiSnipsListSnippets + g:UltiSnipsJumpForwardTrigger + g:UltiSnipsJumpBackwardTrigger + +The g:UltiSnipsExpandTrigger and g:UltiSnipsJumpForwardTrigger can be set to +the same value. To simulate TextMate behavior, add the following lines to your +vimrc file. > + let g:UltiSnipsExpandTrigger="" + let g:UltiSnipsJumpForwardTrigger="" + let g:UltiSnipsJumpBackwardTrigger="" + +UltiSnips will only map the jump triggers while a snippet is active to +interfere as little as possible with other mappings. + +The default value for g:UltiSnipsJumpBackwardTrigger interferes with the +built-in complete function: |i_CTRL-X_CTRL-K|. A workaround is to add the +following to your vimrc file or switching to a plugin like Supertab or +YouCompleteMe. > + inoremap + +3.2.1 Using your own trigger functions *UltiSnips-trigger-functions* +-------------------------------------- + +For advanced users there are four functions that you can map directly to a +key and that correspond to some of the triggers previously defined: + g:UltiSnipsExpandTrigger <--> UltiSnips#ExpandSnippet + g:UltiSnipsJumpForwardTrigger <--> UltiSnips#JumpForwards + g:UltiSnipsJumpBackwardTrigger <--> UltiSnips#JumpBackwards + +If you have g:UltiSnipsExpandTrigger and g:UltiSnipsJumpForwardTrigger set +to the same value then the function you are actually going to use is +UltiSnips#ExpandSnippetOrJump. + +Each time any of the functions UltiSnips#ExpandSnippet, +UltiSnips#ExpandSnippet, UltiSnips#JumpBackwards or UltiSnips#JumpBackwards is +called a global variable is set that contains the return value of the +corresponding function. + +The corresponding variables and functions are: +UltiSnips#ExpandSnippet --> g:ulti_expand_res (0: fail, 1: success) +UltiSnips#ExpandSnippetOrJump --> g:ulti_expand_or_jump_res (0: fail, + 1: expand, 2: jump) +UltiSnips#JumpForwards --> g:ulti_jump_forwards_res (0: fail, 1: success) +UltiSnips#JumpBackwards --> g:ulti_jump_backwards_res (0: fail, 1: success) + +To see how these return values may come in handy, suppose that you want to map +a key to expand or jump, but if none of these actions is successful you want +to call another function. UltiSnips already does this automatically for +supertab, but this allows you individual fine tuning of your Tab key usage. + +Usage is as follows: You define a function > + + let g:ulti_expand_or_jump_res = 0 "default value, just set once + function! Ulti_ExpandOrJump_and_getRes() + call UltiSnips#ExpandSnippetOrJump() + return g:ulti_expand_or_jump_res + endfunction + +then you define your mapping as > + + inoremap =(Ulti_ExpandOrJump_and_getRes() > 0)?"":IMAP_Jumpfunc('', 0) + +and if the you can't expand or jump from the current location then the +alternative function IMAP_Jumpfunc('', 0) is called. + +3.2.2 Path to Python module *UltiSnips-python-module-path* +--------------------------- + +For even more advanced usage, you can directly write python functions using +UltiSnip's python modules. + +Here is a small example funtion that expands a snippet: > + + function! s:Ulti_ExpandSnip() + Python << EOF + import sys, vim + from UltiSnips import UltiSnips_Manager + UltiSnips_Manager.expand() + EOF + return "" + endfunction + +3.3 Snippet Search Path *UltiSnips-snippet-search-path* +----------------------- + +UltiSnips snippet definition files are stored in one or more directories. +There are several variables used to indicate those directories and to define +how UltiSnips loads snippets. + +Snippet definition files are stored in snippet directories. A snippet +directory must be a subdirectory of a directory defined in the 'runtimepath' +option. The variable g:UltiSnipsSnippetDirectories defines a list of names +used for snippet directories. Note that "snippets" is reserved for snipMate +snippets and cannot be used. The default is shown below. > + + let g:UltiSnipsSnippetDirectories=["UltiSnips"] + +UltiSnips will search each 'runtimepath' directory for the subdirectory names +defined in g:UltiSnipsSnippetDirectories in the order they are defined. For +example, if you keep your snippets in a .vim subdirectory called +"mycoolsnippets" and you want to make use of the default snippets that come +with UltiSnips, add the following to your vimrc file. > + let g:UltiSnipsSnippetDirectories=["UltiSnips", "mycoolsnippets"] +If you do not want to use the third party snippets that come with plugins, +define the variable accordingly: > + let g:UltiSnipsSnippetDirectories=["mycoolsnippets"] + +You can also redefine the search path on a buffer by buffer basis by setting +the variable b:UltiSnipsSnippetDirectories. This variable takes precedence +over the global variable. + +|UltiSnips-adding-snippets| explains which files are parsed for a given filetype. + + +3.4 Warning About Select Mode Mappings *UltiSnips-warning-smappings* +-------------------------------------- + +Vim's help document for |mapmode-s| states: > + NOTE: Mapping a printable character in Select mode may confuse the user. + It's better to explicitly use :xmap and :smap for printable characters. Or + use :sunmap after defining the mapping. + +However, most Vim plugins, including some default Vim plugins, do not adhere +to this. UltiSnips uses Select mode to mark tabstops in snippets for +overwriting. Existing Visual+Select mode mappings will interfere. Therefore, +UltiSnips issues a |:sunmap| command to remove each Select mode mapping for +printable characters. No other mappings are touched. In particular, UltiSnips +does not change existing normal, insert or visual mode mappings. + +If this behavior is not desired, you can disable it by adding this line to +your vimrc file. > + let g:UltiSnipsRemoveSelectModeMappings = 0 + +If you want to disable this feature for specific mappings only, add them to +the list of mappings to be ignored. For example, the following lines in your +vimrc file will unmap all Select mode mappings except those mappings +containing either the string "somePlugin" or the string "otherPlugin" in its +complete definition as listed by the |:smap| command. > + + let g:UltiSnipsRemoveSelectModeMappings = 1 + let g:UltiSnipsMappingsToIgnore = [ "somePlugin", "otherPlugin" ] + + +3.5 Functions *UltiSnips-functions* +------------- + +UltiSnips provides some functions for extending core functionality. + + + 3.5.1 UltiSnips#AddSnippetWithPriority *UltiSnips#AddSnippetWithPriority* + +The first function is UltiSnips#AddSnippetWithPriority(trigger, value, description, +options, filetyp, priority). It adds a new snippet with the provided trigger, value, +description, and options to the current list of snippets. See +|UltiSnips-syntax| for details on the meaning of the function arguments. The +Priority is a number that defines which snippet should be preferred over +others. See the priority keyword in|UltiSnips-add-snippets|. + + + 3.5.2 UltiSnips#Anon *UltiSnips#Anon* + +The second function is UltiSnips#Anon(value, ...). It expands an anonymous +snippet. Anonymous snippets are defined on the spot, expanded and immediately +discarded again. Anonymous snippets are not added to the global list of +snippets, so they cannot be expanded a second time unless the function is +called again. The function takes three optional arguments, in order: trigger, +description, options. Arguments coincide with the arguments of the +|UltiSnips#AddSnippetWithPriority| function of the same name. The trigger and +options arguments can change the way the snippet expands. The description is +unused at this point. + +An example use case might be this line from a reStructuredText plugin file: + + inoremap $$ $$=UltiSnips#Anon(':latex:\`$1\`', '$$') + +This expands the snippet whenever two $ signs are typed. +Note: The right-hand side of the mapping starts with an immediate retype of +the '$$' trigger and passes '$$' to the function as the trigger argument. +This is required in order for UltiSnips to have access to the characters +typed so it can determine if the trigger matches or not. + + 3.5.3 UltiSnips#SnippetsInCurrentScope *UltiSnips#SnippetsInCurrentScope* + +A third function is UltiSnips#SnippetsInCurrentScope which is the equivalent +of snipmate GetSnipsInCurrentScope function. +This function simply returns a vim dictionary with the snippets whose trigger +matches the current word. +This function does not add any new functionality to ultisnips directly but +allows to use third party plugins to integrate the current available snippets. + +An example of such third party plugin is SnippetCompleteSnipMate which uses +the function GetSnipsInCurrentScope to integrate the current available +snippets with user defined abbreviations and provides these and a completion +menu. +This script is located in +http://www.vim.org/scripts/script.php?script_id=4276. +Note: If you check the above website it lists two dependencies: the +SnippetComplete plugin and snipmate. +You do need the SnippetComplete plugin but you obviously don't need snipmate, +you just have to define the function GetSnipsInCurrentScope. Put the following +in your vimrc: + +function! GetSnipsInCurrentScope() + return UltiSnips#SnippetsInCurrentScope() +endfunction + + +As a second example on how to use this function consider the following +function and mapping definition: + +function! ExpandPossibleShorterSnippet() + if len(UltiSnips#SnippetsInCurrentScope()) == 1 "only one candidate... + let curr_key = keys(UltiSnips#SnippetsInCurrentScope())[0] + normal diw + exe "normal a" . curr_key + exe "normal a " + return 1 + endif + return 0 +endfunction +inoremap =(ExpandPossibleShorterSnippet() == 0? '': UltiSnips#ExpandSnippet()) + +If the trigger for your snippet is lorem, you type lor, and you have no other +snippets whose trigger matches lor then hitting will expand to whatever +lorem expands to. + + +3.6 Warning about missing python support *UltiSnips-python-warning* +---------------------------------------- + +When UltiSnips is loaded, it will check that the running Vim was compiled with +python support. If no support is detected, a warning will be displayed and +loading of UltiSnips will be skipped. + +If you would like to suppress this warning message, you may add the following +line to your vimrc file. + + let g:UltiSnipsNoPythonWarning = 1 + +This may be useful if your Vim configuration files are shared across several +systems where some of them may not have Vim compiled with python support. + +============================================================================= +4. Syntax *UltiSnips-syntax* + +This chapter describes how to write your own snippets and snippet definition +syntax. Examples are used to help illustrate. + + +4.1 Adding Snippets *UltiSnips-adding-snippets* +------------------- + +See |UltiSnips-snippet-search-path| for an explanation of where directories +with snippet definitions should be located. + +Using a strategy similar to how Vim detects |ftplugins|, UltiSnips iterates +over the snippet definition directories looking for files with names of the +following patterns: ft.snippets, ft_*.snippets, or ft/*, where "ft" is the +'filetype' of the current document and "*" is a shell-like wildcard matching +any string including the empty string. The following table shows some typical +snippet filenames and their associated filetype. + + snippet filename filetype ~ + ruby.snippets ruby + perl.snippets perl + c.snippets c + c_my.snippets c + c/a c + c/b.snippets c + all.snippets *all + all/a.snippets *all + +* The 'all' filetype is unique. It represents snippets available for use when +editing any document regardless of the filetype. A date insertion snippet, for +example, would fit well in the all.snippets file. + +UltiSnips understands Vim's dotted filetype syntax. For example, if you define +a dotted filetype for the CUDA C++ framework, e.g. ":set ft=cuda.cpp", then +UltiSnips will search for and activate snippets for both the cuda and cpp +filetypes. + +The snippets file syntax is simple. All lines starting with a # character are +considered comments. Comments are ignored by UltiSnips. Use them to document +snippets. + +A line beginning with the keyword 'extends' provides a way of combining +snippet files. When the 'extends' directive is included in a snippet file, it +instructs UltiSnips to include all snippets from the indicated filetypes. + +The syntax looks like this: > + extends ft1, ft2, ft3 + +For example, the first line in cpp.snippets looks like this: > + extends c +When UltiSnips activates snippets for a cpp file, it first looks for all c +snippets and activates them as well. This is a convenient way to create +specialized snippet files from more general ones. Multiple 'extends' lines are +permitted in a snippet file, and they can be included anywhere in the file. + + +A line beginning with the keyword 'priority' sets the priority for all +snippets defined in the current file after this line. The default priority for +a file is always 0. When a snippet should be expanded, UltiSnips will collect +all snippet definitions from all sources that match the trigger and keep only +the ones with the highest priority. For example, all shipped snippets have a +priority < 0, so that user defined snippets always overwrite shipped snippets. + + +A line beginning with the keyword 'snippet' marks the beginning of snippet +definition and a line starting with the keyword 'endsnippet' marks the end. +The snippet definition is placed between the lines. Here is a snippet of an +'if' statement for the Unix shell (sh) filetype. + + snippet if "if ... then (if)" + if ${2:[[ ${1:condition} ]]}; then + ${0:#statements} + fi + endsnippet + +The start line takes the following form: > + + snippet tab_trigger [ "description" [ options ] ] + +The tab_trigger is required, but the description and options are optional. + +The 'tab_trigger' is the word or string sequence used to trigger the snippet. +Generally a single word is used but the tab_trigger can include spaces. If you +wish to include spaces, you must wrap the tab trigger in quotes. > + + snippet "tab trigger" [ "description" [ options ] ] + +The quotes are not part of the trigger. To activate the snippet type: tab trigger +followed by the snippet expand character. + +It is not technically necessary to use quotes to wrap a trigger with spaces. +Any matching characters will do. For example, this is a valid snippet starting +line. > + snippet !tab trigger! [ "description" [ options ] ] + +Quotes can be included as part of the trigger by wrapping the trigger in +another character. > + snippet !"tab trigger"! [ "description" [ options ] ] + +To activate this snippet one would type: "tab trigger" + +The 'description' is a string describing the trigger. It is helpful for +documenting the snippet and for distinguishing it from other snippets with the +same tab trigger. When a snippet is activated and more than one tab trigger +match, UltiSnips displays a list of the matching snippets with their +descriptions. The user then selects the snippet they want. + +The 'options' control the behavior of the snippet. Options are indicated by +single characters. The 'options' characters for a snippet are combined into +a word without spaces. + +The options currently supported are: > + b Beginning of line - A snippet with this option is expanded only if the + tab trigger is the first word on the line. In other words, if only + whitespace precedes the tab trigger, expand. The default is to expand + snippets at any position regardless of the preceding non-whitespace + characters. + + i In-word expansion - By default a snippet is expanded only if the tab + trigger is the first word on the line or is preceded by one or more + whitespace characters. A snippet with this option is expanded + regardless of the preceding character. In other words, the snippet can + be triggered in the middle of a word. + + w Word boundary - With this option, the snippet is expanded if + the tab trigger start matches a word boundary and the tab trigger end + matches a word boundary. In other words the tab trigger must be + preceded and followed by non-word characters. Word characters are + defined by the 'iskeyword' setting. Use this option, for example, to + permit expansion where the tab trigger follows punctuation without + expanding suffixes of larger words. + + r Regular expression - With this option, the tab trigger is expected to + be a python regular expression. The snippet is expanded if the recently + typed characters match the regular expression. Note: The regular + expression MUST be quoted (or surrounded with another character) like a + multi-word tab trigger (see above) whether it has spaces or not. A + resulting match is passed to any python code blocks in the snippet + definition as the local variable "match". + + t Do not expand tabs - If a snippet definition includes leading tab + characters, by default UltiSnips expands the tab characters honoring + the Vim 'shiftwidth', 'softtabstop', 'expandtab' and 'tabstop' + indentation settings. (For example, if 'expandtab' is set, the tab is + replaced with spaces.) If this option is set, UltiSnips will ignore the + Vim settings and insert the tab characters as is. This option is useful + for snippets involved with tab delimited formats, for example. + + s Remove whitespace immediately before the cursor at the end of a line + before jumping to the next tabstop. This is useful if there is a + tabstop with optional text at the end of a line. + +The end line is the 'endsnippet' keyword on a line by itself. > + + endsnippet + +When parsing snippet files, UltiSnips chops the trailing newline character +from the 'endsnippet' end line. + + + 4.1.1 Character Escaping: *UltiSnips-character-escaping* + +In snippet definitions, the characters '`', '{', '$', '\' and "'" (single +quote) have special meaning. If you want to insert one of these characters +literally, escape them with a backslash, '\'. + + +4.2 Plaintext Snippets *UltiSnips-plaintext-snippets* +---------------------- + +To illustrate plaintext snippets, let's begin with a simple example. You can +try the examples yourself. Simply edit a new file with Vim. Example snippets +will be added to the 'all.snippets' file, so you'll want to open it in Vim for +editing as well. > + ~/.vim/UltiSnips/all.snippets + +Add this snippet to 'all.snippets' and save the file. + +------------------- SNIP ------------------- +snippet bye "My mail signature" +Good bye, Sir. Hope to talk to you soon. +- Arthur, King of Britain +endsnippet +------------------- SNAP ------------------- + +UltiSnips detects when you write changes to a snippets file and automatically +makes the changes active. So in the empty buffer, type the tab trigger 'bye' +and then press the key. + +bye --> +Good bye, Sir. Hope to talk to you soon. +- Arthur, King of Britain + +The word 'bye' will be replaced with the text of the snippet definition. + + +4.3 Visual Placeholder *UltiSnips-visual-placeholder* +---------------------- + +Snippets can contain a special placeholder called ${VISUAL}. The ${VISUAL} +variable is expanded with the text selected just prior to expanding the +snippet. + +To see how a snippet with a ${VISUAL} placeholder works, define a snippet with +the placeholder, use Vim's Visual mode to select some text, and then press the +key you use to trigger expanding a snippet (see g:UltiSnipsExpandTrigger). The +selected text is deleted, and you are dropped into Insert mode. Now type the +snippet tab trigger and press the key to trigger expansion. As the snippet +expands, the previously selected text is printed in place of the ${VISUAL} +placeholder. + +The ${VISUAL} placeholder can contain default text to use when the snippet has +been triggered when not in Visual mode. The syntax is: > + ${VISUAL:default text} + +The ${VISUAL} placeholder can also define a transformation (see +|UltiSnips-transformations|). The syntax is: > + ${VISUAL:default/search/replace/option}. + +Here is a simple example illustrating a visual transformation. The snippet +will take selected text, replace every instance of "should" within it with +"is" , and wrap the result in tags. + +------------------- SNIP ------------------- +snippet t +${VISUAL:inside text/should/is/g} +endsnippet +------------------- SNAP ------------------- + +Start with this line of text: > + this should be cool + +Position the cursor on the word "should", then press the key sequence: viw +(visual mode -> select inner word). Then press , type "t" and press +again. The result is: > + -> this is be cool + +If you expand this snippet while not in Visual mode (e.g., in Insert mode type +t), you will get: > + inside text + + +4.4 Interpolation *UltiSnips-interpolation* +----------------- + + 4.4.1 Shellcode: *UltiSnips-shellcode* + +Snippets can include shellcode. Put a shell command in a snippet and when the +snippet is expanded, the shell command is replaced by the output produced when +the command is executed. The syntax for shellcode is simple: wrap the code in +backticks, '`'. When a snippet is expanded, UltiSnips runs shellcode by first +writing it to a temporary script and then executing the script. The shellcode +is replaced by the standard output. Anything you can run as a script can be +used in shellcode. Include a shebang line, for example, #!/usr/bin/perl, and +your snippet has the ability to run scripts using other programs, perl, for +example. + +Here are some examples. This snippet uses a shell command to insert the +current date. + +------------------- SNIP ------------------- +snippet today +Today is the `date +%d.%m.%y`. +endsnippet +------------------- SNAP ------------------- + +today -> +Today is the 15.07.09. + + +This example inserts the current date using perl. + +------------------- SNIP ------------------- +snippet today +Today is `#!/usr/bin/perl +@a = localtime(); print $a[3] . '.' . $a[4] . '.' . ($a[5]+1900);`. +endsnippet +------------------- SNAP ------------------- +today -> +Today is 15.6.2009. + + + 4.4.2 VimScript: *UltiSnips-vimscript* + +You can also use Vim scripts (sometimes called VimL) in interpolation. The +syntax is similar to shellcode. Wrap the code in backticks and to distinguish +it as a Vim script, start the code with '!v'. Here is an example that counts +the indent of the current line: + +------------------- SNIP ------------------- +snippet indent +Indent is: `!v indent(".")`. +endsnippet +------------------- SNAP ------------------- + (note the 4 spaces in front): indent -> + (note the 4 spaces in front): Indent is: 4. + + + 4.4.3 Python: *UltiSnips-python* + +Python interpolation is by far the most powerful. The syntax is similar to Vim +scripts except code is started with '!p'. Python scripts can be run using the +python shebang '#!/usr/bin/python', but using the '!p' format comes with some +predefined objects and variables, which can simplify and shorten code. For +example, a 'snip' object instance is implied in python code. Python code using +the '!p' indicator differs in another way. Generally when a snippet is +expanded the standard output of code replaces the code. With python code the +value of the 'rv' property of the 'snip' instance replaces the code. Standard +output is ignored. + +The variables automatically defined in python code are: > + + fn - The current filename + path - The complete path to the current file + t - The values of the placeholders, t[1] is the text of ${1}, and so on + snip - UltiSnips.TextObjects.SnippetUtil object instance. Has methods that + simplify indentation handling. + +The 'snip' object provides the following methods: > + + snip.mkline(line="", indent=None): + Returns a line ready to be appended to the result. If indent + is None, then mkline prepends spaces and/or tabs appropriate to the + current 'tabstop' and 'expandtab' variables. + + snip.shift(amount=1): + Shifts the default indentation level used by mkline right by the + number of spaces defined by 'shiftwidth', 'amount' times. + + snip.unshift(amount=1): + Shifts the default indentation level used by mkline left by the + number of spaces defined by 'shiftwidth', 'amount' times. + + snip.reset_indent(): + Resets the indentation level to its initial value. + + snip.opt(var, default): + Checks if the Vim variable 'var' has been set. If so, it returns the + variable's value; otherwise, it returns the value of 'default'. + +The 'snip' object provides some properties as well: > + + snip.rv: + 'rv' is the return value, the text that will replace the python block + in the snippet definition. It is initialized to the empty string. This + deprecates the 'res' variable. + + snip.c: + The text currently in the python block's position within the snippet. + It is set to empty string as soon as interpolation is completed. Thus + you can check if snip.c is != "" to make sure that the interpolation + is only done once. This deprecates the "cur" variable. + + snip.v: + Data related to the ${VISUAL} placeholder. The property has two + attributes: + snip.v.mode ('v', 'V', '^V', see |visual-mode| ) + snip.v.text The text that was selected. + + snip.fn: + The current filename. + + snip.basename: + The current filename with the extension removed. + + snip.ft: + The current filetype. + +For your convenience, the 'snip' object also provides the following +operators: > + + snip >> amount: + Equivalent to snip.shift(amount) + snip << amount: + Equivalent to snip.unshift(amount) + snip += line: + Equivalent to "snip.rv += '\n' + snip.mkline(line)" + +Any variables defined in a python block can be used in other python blocks +that follow within the same snippet. Also, the python modules 'vim', 're', +'os', 'string' and 'random' are pre-imported within the scope of snippet code. +Other modules can be imported using the python 'import' command. + +Python code allows for very flexible snippets. For example, the following +snippet mirrors the first tabstop value on the same line but right aligned and +in uppercase. + +------------------- SNIP ------------------- +snippet wow +${1:Text}`!p snip.rv = (75-2*len(t[1]))*' '+t[1].upper()` +endsnippet +------------------- SNAP ------------------- +wowHello World -> +Hello World HELLO WORLD + +The following snippet uses the regular expression option and illustrates +regular expression grouping using python's match object. It shows that the +expansion of a snippet can depend on the tab trigger used to define the +snippet, and that tab trigger itself can vary. + +------------------- SNIP ------------------- +snippet "be(gin)?( (\S+))?" "begin{} / end{}" br +\begin{${1:`!p +snip.rv = match.group(3) if match.group(2) is not None else "something"`}} + ${2:${VISUAL}} +\end{$1}$0 +endsnippet +------------------- SNAP ------------------- +becenter -> +\begin{center} + +\end{center} +------------------- SNAP ------------------- +be center -> +\begin{center} + +\end{center} + +The second form is a variation of the first; both produce the same result, +but it illustrates how regular expression grouping works. Using regular +expressions in this manner has some drawbacks: +1. If you use the key for both expanding snippets and completion then + if you typed "be form" expecting the completion "be formatted", you + would end up with the above SNAP instead, not what you want. +2. The snippet is harder to read. + + + 4.4.4 Global Snippets: *UltiSnips-globals* + +Global snippets provide a way to reuse common code in multiple snippets. +Currently, only python code is supported. The result of executing the contents +of a global snippet is put into the globals of each python block in the +snippet file. To create a global snippet, use the keyword 'global' in place of +'snippet', and for python code, you use '!p' for the trigger. For example, the +following snippet produces the same output as the last example . However, with +this syntax the 'upper_right' snippet can be reused by other snippets. + +------------------- SNIP ------------------- +global !p +def upper_right(inp): + return (75 - 2 * len(inp))*' ' + inp.upper() +endglobal + +snippet wow +${1:Text}`!p snip.rv = upper_right(t[1])` +endsnippet +------------------- SNAP ------------------- +wowHello World -> +Hello World HELLO WORLD + +Python global functions can be stored in a python module and then imported. +This makes global functions easily accessible to all snippet files. Since Vim +7.4 you can just drop python files into ~/.vim/pythonx and import them +directly inside your snippets. For example to use +~/.vim/pythonx/my_snippets_helpers.py > + + global !p + from my_snippet_helpers import * + endglobals + + +4.4 Tabstops and Placeholders *UltiSnips-tabstops* *UltiSnips-placeholders* +----------------------------- + +Snippets are used to quickly insert reused text into a document. Often the +text has a fixed structure with variable components. Tabstops are used to +simplify modifying the variable content. With tabstops you can easily place +the cursor at the point of the variable content, enter the content you want, +then jump to the next variable component, enter that content, and continue +until all the variable components are complete. + +The syntax for a tabstop is the dollar sign followed by a number, for example, +'$1'. Tabstops start at number 1 and are followed in sequential order. The +'$0' tabstop is a special tabstop. It is always the last tabstop in the +snippet no matter how many tabstops are defined. + +Here is a simple example. + +------------------- SNIP ------------------- +snippet letter +Dear $1, +$0 +Yours sincerely, +$2 +endsnippet +------------------- SNAP ------------------- +letterBenPaulThanks for suggesting UltiSnips!-> +Dear Ben, +Thanks for suggesting UltiSnips! +Yours sincerely, +Paul + +You can use to jump to the next tabstop, and to jump to the +previous. The key was not used for jumping forward because many people +(myself included) use for completion. See |UltiSnips-triggers| for +help on defining different keys for tabstops. + +It is often useful to have some default text for a tabstop. The default text +may be a value commonly used for the variable component, or it may be a word +or phrase that reminds you what is expected for the variable component. To +include default text, the syntax is '${1:value}'. + +The following example illustrates a snippet for the shell 'case' statement. +The tabstops use default values to remind the user of what value is expected. + +------------------- SNIP ------------------- +snippet case +case ${1:word} in + ${2:pattern} ) $0;; +esac +endsnippet +------------------- SNAP ------------------- + +case$option-vverbose=true +case $option in + -v ) verbose=true;; +esac + + +Sometimes it is useful to have a tabstop within a tabstop. To do this, simply +include the nested tabstop as part of the default text. Consider the following +example illustrating an HTML anchor snippet. + +------------------- SNIP ------------------- +snippet a + + $0 + +endsnippet +------------------- SNAP ------------------- + +When this snippet is expanded, the first tabstop has a default value of +'http://www.example.com'. If you want the 'http://' schema, jump to the next +tabstop. It has a default value of 'example.com'. This can be replaced by +typing whatever domain you want. + +agoogle.comGoogle -> + + Google + + +If at the first tabstop you want a different url schema or want to replace the +default url with a named anchor, '#name', for example, just type the value you +want. + +a#topTop -> + + Top + + +In the last example, typing any text at the first tabstop replaces the default +value, including the second tabstop, with the typed text. So the second +tabstop is essentially deleted. When a tabstop jump is triggered, UltiSnips +moves to the next remaining tabstop '$0'. This feature can be used +intentionally as a handy way for providing optional tabstop values to the +user. Here is an example to illustrate. + +------------------- SNIP ------------------- +snippet a + + $0 + +endsnippet +------------------- SNAP ------------------- + +Here, '$1' marks the first tabstop. It is assumed you always want to add a +value for the 'href' attribute. After entering the url and pressing , the +snippet will jump to the second tabstop, '$2'. This tabstop is optional. The +default text is ' class="link"'. You can press to accept the tabstop, +and the snippet will jump to the third tabstop, '$3', and you can enter the +class attribute value, or, at the second tabstop you can press the backspace +key thereby replacing the second tabstop default with an empty string, +essentially removing it. In either case, continue by pressing and the +snippet will jump to the final tabstop inside the anchor. + +ahttp://www.google.comvisitedGoogle -> + + Google + + +ahttp://www.google.comGoogle -> + + Google + + +The default text of tabstops can also contain mirrors, transformations or +interpolation. + + +4.6 Mirrors *UltiSnips-mirrors* +----------- + +Mirrors repeat the content of a tabstop. During snippet expansion when you +enter the value for a tabstop, all mirrors of that tabstop are replaced with +the same value. To mirror a tabstop simply insert the tabstop again using the +"dollar sign followed by a number" syntax, e.g., '$1'. + +A tabstop can be mirrored multiple times in one snippet, and more than one +tabstop can be mirrored in the same snippet. A mirrored tabstop can have a +default value defined. Only the first instance of the tabstop need have a +default value. Mirrored tabstop will take on the default value automatically. + +Mirrors are handy for start-end tags, for example, TeX 'begin' and 'end' tag +labels, XML and HTML tags, and C code #ifndef blocks. Here are some snippet +examples. + +------------------- SNIP ------------------- +snippet env +\begin{${1:enumerate}} + $0 +\end{$1} +endsnippet +------------------- SNAP ------------------- +envitemize -> +\begin{itemize} + +\end{itemize} + +------------------- SNIP ------------------- +snippet ifndef +#ifndef ${1:SOME_DEFINE} +#define $1 +$0 +#endif /* $1 */ +endsnippet +------------------- SNAP ------------------- +ifndefWIN32 -> +#ifndef WIN32 +#define WIN32 + +#endif /* WIN32 */ + + +4.7 Transformations *UltiSnips-transformations* +------------------- + +Note: Transformations are a bit difficult to grasp so this chapter is divided +into two sections. The first describes transformations and their syntax, and +the second illustrates transformations with demos. + +Transformations are like mirrors but instead of just copying text from the +original tabstop verbatim, a regular expression is matched to the content of +the referenced tabstop and a transformation is then applied to the matched +pattern. The syntax and functionality of transformations in UltiSnips follow +very closely to TextMate transformations. + +A transformation has the following syntax: > + ${ + tab_stop_no - The number of the tabstop to reference + regular_expression - The regular expression the value of the referenced + tabstop is matched on + replacement - The replacement string, explained in detail below + options - Options for the regular expression + +The options can be any combination of > + g - global replace + By default, only the first match of the regular expression is + replaced. With this option all matches are replaced. + i - case insensitive + By default, regular expression matching is case sensitive. With this + option, matching is done without regard to case. + a - ascii conversion + By default, transformation are made on the raw utf-8 string. With + this option, matching is done on the corresponding ASCII string + instead, for example 'à' will become 'a'. + This option required the python package 'unidecode'. + +The syntax of regular expressions is beyond the scope of this document. Python +regular expressions are used internally, so the python 're' module can be used +as a guide. See http://docs.python.org/library/re.html. + +The syntax for the replacement string is unique. The next paragraph describes +it in detail. + + + 4.7.1 Replacement String: *UltiSnips-replacement-string* + +The replacement string can contain $no variables, e.g., $1, which reference +matched groups in the regular expression. The $0 variable is special and +yields the whole match. The replacement string can also contain special escape +sequences: > + \u - Uppercase next letter + \l - Lowercase next letter + \U - Uppercase everything till the next \E + \L - Lowercase everything till the next \E + \E - End upper or lowercase started with \L or \U + \n - A newline + \t - A literal tab + +Finally, the replacement string can contain conditional replacements using the +syntax (?no:text:other text). This reads as follows: if the group $no has +matched, insert "text", otherwise insert "other text". "other text" is +optional and if not provided defaults to the empty string, "". This feature +is very powerful. It allows you to add optional text into snippets. + + + 4.7.2 Demos: *UltiSnips-demos* + +Transformations are very powerful but often the syntax is convoluted. +Hopefully the demos below help illustrate transformation features. + +Demo: Uppercase one character +------------------- SNIP ------------------- +snippet title "Title transformation" +${1:a text} +${1/\w+\s*/\u$0/} +endsnippet +------------------- SNAP ------------------- +titlebig small -> +big small +Big small + + +Demo: Uppercase one character and global replace +------------------- SNIP ------------------- +snippet title "Titlelize in the Transformation" +${1:a text} +${1/\w+\s*/\u$0/g} +endsnippet +------------------- SNAP ------------------- +titlethis is a title -> +this is a title +This Is A Title + + +Demo: ASCII transformation +------------------- SNIP ------------------- +snippet ascii "Replace non ascii chars" +${1: an accentued text} +${1/.*/$0/a} +endsnippet +------------------- SNAP ------------------- +asciià la pêche aux moules +à la pêche aux moules +a la peche aux moules + + +Demo: Regular expression grouping + This is a clever c-like printf snippet, the second tabstop is only shown + when there is a format (%) character in the first tabstop. + +------------------- SNIP ------------------- +snippet printf +printf("${1:%s}\n"${1/([^%]|%%)*(%.)?.*/(?2:, :\);)/}$2${1/([^%]|%%)*(%.)?.*/(?2:\);)/} +endsnippet +------------------- SNAP ------------------- +printfHello // End of line -> +printf("Hello\n"); // End of line + +But +printfA is: %sA // End of line -> +printf("A is: %s\n", A); // End of line + + +There are many more examples of what can be done with transformations in the +bundled snippets. + + +4.8 Clearing snippets *UltiSnips-clearing-snippets* + +To remove snippets for the current file type, use the 'clearsnippets' +directive. + +------------------- SNIP ------------------- +clearsnippets +------------------- SNAP ------------------- + +'clearsnippets' removes all snippets with a priority lower than the current +one. For example, the following cleares all snippets that have priority <= 1, +even though the example snippet is defined after the 'clearsnippets'. + +------------------- SNIP ------------------- +priority 1 +clearsnippets + +priority -1 +snippet example "Cleared example" + This will never be expanded. +endsnippet +------------------- SNAP ------------------- + +To clear one or more specific snippet, provide the triggers of the snippets as +arguments to the 'clearsnippets' command. The following example will clear the +snippets 'trigger1' and 'trigger2'. + +------------------- SNIP ------------------- +clearsnippets trigger1 trigger2 +------------------- SNAP ------------------- + + +============================================================================== +5. UltiSnips and Other Plugins *UltiSnips-other-plugins* + +5.1 Existing Integrations *UltiSnips-integrations* +------------------------- + +UltiSnips has built-in support for some common plugins and there are others +that are aware of UltiSnips and use it to improve the user experience. This is +an incomplete list - if you want to have your plugin listed here, just send me +a pull request. + + *UltiSnips-snipMate* + +snipMate - UltiSnips is a drop-in replacement for snipMate. It has many more +features, so porting snippets is still a good idea, but switching has low +friction now. UltiSnips is trying hard to truly emulate snipMate, for example +recursive tabstops are not supported in snipMate snippets (but of course in +UltiSnips snippets). + +YouCompleteMe - comes with out of the box completion support for UltiSnips. It +offers a really nice completion dialogue for snippets. + +neocomplete - UltiSnips ships with a source for neocomplete and therefore +offers out of the box completion dialogue support for it too. + +unite - UltiSnips has a source for unite. As an example of how you can use +it add the following function and mappings to your vimrc: > + + function! UltiSnipsCallUnite() + Unite -start-insert -winheight=100 -immediately -no-empty ultisnips + return '' + endfunction + + inoremap =(pumvisible()? "\C-E>":"")=UltiSnipsCallUnite() + nnoremap a=(pumvisible()? "\C-E>":"")=UltiSnipsCallUnite() + +When typing in either insert or normal mode you will get the unite +interface with matching snippets. Pressing enter will expand the corresponding +snippet. If only one snippet matches the text in front of the cursor will be +expanded when you press the key. + +Supertab - UltiSnips has built-in support for Supertab. Just use a recent +enough version of both plugins and will either expand a snippet or defer +to Supertab for expansion. + +5.2 Extending UltiSnips *UltiSnips-extending* +------------------------- + +UltiSnips allows other plugins to add new snippets on the fly. Since UltiSnips +is written in python, the integration is also on a python basis. A small +example can be found in `test.py`, search for AddNewSnippetSource. Please +contact me on github if you integrate UltiSnips with your plugin so it can be +listed in the docs. + +============================================================================= +6. Helping Out *UltiSnips-helping* + +UltiSnips needs the help of the Vim community to keep improving. Please +consider joining this effort by providing new snippets, new features or bug +reports. + +You can contribute snippets or patches in various ways. The methods are listed +below in order of convenience for me. Please be as convenient as you +can be :) + +* Clone the repository on GitHub (git clone git@github.com:SirVer/ultisnips.git), + make your changes and send a pull request on GitHub. +* Make a patch, report a bug/feature request (see below) and attach the patch + to it. +* Send me an Email with a patch (see Contact section below). +* Send me an Email with the changed files only. + +You can contribute by fixing or reporting bugs in our issue tracker: +https://github.com/sirver/ultisnips/issues + +If you like this plugin, please vote for it on its Vim script page > + http://www.vim.org/scripts/script.php?script_id=2715 +It is life-changing for me. Maybe it is for you too. + + +============================================================================= +7. Contact *UltiSnips-contact* + +You can reach me at SirVer -AT- gmx -ADOT- de. + +This project aims to be the one-for-all solution for Snippets for Vim. If you +miss a feature or find a bug, please contact me or add an issues to our issues +tracker. + +============================================================================= +8. Contributors *UltiSnips-contributors* + +The primary developer of UltiSnips is SirVer (Holger Rapp). The following +individuals have contributed to UltiSnips (in chronological order): + + JCEB - Jan Christoph Ebersbach + Michael Henry + Chris Chambers + Ryan Wooden + rupa - Rupa Deadwyler + Timo Schmiade + blueyed - Daniel Hahler + expelledboy - Anthony Jackson + allait - Alexey Bezhan + peacech - Charles Gunawan + guns - Sung Pae + shlomif - Shlomi Fish + pberndt - Phillip Berndt + thanatermesis-elive - Thanatermesis + rico-ambiescent - Rico Sta. Cruz + Cody Frazer + suy - Alejandro Exojo + grota - Giuseppe Rota + iiijjjii - Jim Karsten + fgalassi - Federico Galassi + lucapette + Psycojoker - Laurent Peuch + aschrab - Aaron Schrab + stardiviner - NagatoPain + skeept - Jorge Rodrigues + buztard + stephenmckinney - Steve McKinney + Pedro Algarvio - s0undt3ch + Eric Van Dewoestine - ervandew + Matt Patterson - fidothe + Mike Morearty - mmorearty + Stanislav Golovanov - JazzCore + David Briscoe - DavidBriscoe + Keith Welch - paralogiki + Zhao Cai - zhaocai + John Szakmeister - jszakmeister + Jonas Diemer - diemer + Romain Giot - rgiot + Sergey Alexandrov - taketwo + Brian Mock - saikobee + Gernot Höflechner - LFDM + Marcelo D Montu - mMontu + Karl Yngve Lervåg - lervag + Pedro Ferrari - petobens + Ches Martin - ches + Christian - Oberon00 + Andrew Ruder - aeruder + Mathias Fußenegger - mfussenegger + Kevin Ballard - kballard + Ahbong Chang - cwahbong + Glenn Griffin - ggriffiniii + + +Thank you for your support. + +vim:tw=78:ts=8:ft=help:norl: diff --git a/vim/vim.symlink/bundle/ultisnips/doc/demo.gif b/vim/vim.symlink/bundle/ultisnips/doc/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..32affe42cffec4a57f0edb2b3036e92adb7e629f GIT binary patch literal 1071709 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
1+%veZH~L;707~oDQCpVX8w)|? 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%0DVnbv`3T8J+FoZ(dP!Kv= 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 z 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