vimrc/sources_non_forked/vim-snippets/README.md

265 lines
9.7 KiB
Markdown
Raw Normal View History

2014-09-27 15:32:18 +00:00
snipMate & UltiSnip Snippets
============================
2015-07-13 10:22:46 +00:00
[![Build Status](https://travis-ci.org/honza/vim-snippets.svg)](https://travis-ci.org/honza/vim-snippets)
This repository contains snippets files for various programming languages.
2013-04-26 16:17:22 +00:00
It is community-maintained and many people have contributed snippet files and
other improvements already.
Contents
--------
2014-09-27 15:32:18 +00:00
- `snippets/*`: snippets using snipMate format
- `UltiSnips/*`: snippets using UltiSnips format
Snippet engines supporting vim-snippets
----------------------------------------
There are different forks of snippet engines which allow the user to insert
snippets by typing the name of a snippet hitting the expansion mapping.
2018-09-25 00:40:17 +00:00
- [github.com/SirVer/ultisnips][7]:
python, supports all snippets in this repo.
2018-09-25 00:40:17 +00:00
- [github.com/garbas/vim-snipmate](https://github.com/garbas/vim-snipmate):
VimL, snipmate-snippets, engine sometimes behaves strange. Supports
snippets/*
2018-09-25 00:40:17 +00:00
- [github.com/Shougo/neosnippet](https://github.com/Shougo/neosnippet.vim):
VimL, supports snippets/* with some configuration.
- [github.com/dcampos/nvim-snippy](https://github.com/dcampos/nvim-snippy):
Lua, supports snippets/* with some configuration.
- [github.com/L3MON4D3/LuaSnip](https://github.com/L3MON4D3/LuaSnip):
Lua, supports snippets/* with some configuration.
Also supports redefining snippets without changing the priority, unlike
nvim-snippy.
- [github.com/drmingdrmer/xptemplate](https://github.com/drmingdrmer/xptemplate):
Totally different syntax, does not read snippets contained in this file, but
it is also very powerful. It does not support vim-snippets (just listing it
2014-09-27 15:32:18 +00:00
here for completeness)
There tries to be a more comprehensive list (which still is incomplete) here:
http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html
UltiSnips has additional features such as high speed, nesting snippets,
expanding snippets in snippets and offers powerful transformations on text in
snippets (like visual selections or placeholder texts).
2018-09-25 00:40:17 +00:00
Which one to use? If you have python give [SirVer/ultisnips][7] a try because
its fast and has the most features.
If you have VimL only (vim without python support) your best option is using
[garbas/vim-snipmate](https://github.com/garbas/vim-snipmate) and cope with the
minor bugs found in the engine.
If you use Neovim and prefer Lua plugins,
[L3MON4D3/LuaSnip](https://github.com/L3MON4D3/LuaSnip) is the best option.
2018-09-25 00:40:17 +00:00
**Q**: Should snipMate be deprecated in favour of UltiSnips?
2013-07-17 23:06:05 +00:00
2018-09-25 00:40:17 +00:00
**A**: No, because snipMate is VimL, and UltiSnips requires Python.
2014-07-02 11:18:18 +00:00
Some people want to use snippets without having to install Vim with Python
2014-09-27 15:32:18 +00:00
support. Yes - this sucks.
2014-07-02 11:18:18 +00:00
One solution would be: Use snippets if they are good enough, but allow overriding them
in UltiSnips. This would avoid most duplication while still serving most users.
2014-09-27 15:32:18 +00:00
AFAIK there is a nested-placeholder branch for snipMate too. snipMate is still
2014-07-02 11:18:18 +00:00
improved by Adnan Zafar. So maybe time is not ready to make a final decision yet.
[github issue/discussion](https://github.com/honza/vim-snippets/issues/363)
2015-12-08 13:20:04 +00:00
Vendor Snippets
---------------
Additional library and framework snippets are available for UltiSnips users in
the `UltiSnips/` directory. These files are removed from the default language
namespaces to prevent them from all being loaded automatically. If there is a
separate library, framework, or package you would like to support open a pull
request!
Additional snippets can be added to the current buffer with the
`:UltiSnipsAddFiletypes` command followed by the snippet name without the
"snippets" ending. For example, to add the JavaScript Jasmine snippets, run:
`:UltiSnipsAddFiletypes javascript-jasmine`. To have this snippet loaded
everytime a JavaScript file is opened or created you can add the command to your
2016-03-14 10:04:57 +00:00
-`.vim/ftplugin/javascript.vim` file. Another way is to add
`autocmd FileType js UltiSnipsAddFiletypes javascript-jasmine` in your `.vimrc`.
2015-12-08 13:20:04 +00:00
For more see the UltiSnips docs (`:help UltiSnips`).
Installation
------------
2018-09-25 00:40:17 +00:00
First be aware that there are many options, see "Snippet engines" above. Second
be aware than there are [tons of plugin managers][8] which is why Marc Weber
thinks that it doesn't make sense to repeat the same repetitive information
everywhere.
2018-09-25 00:40:17 +00:00
The recommended way to install these snippets is by using
[vim-addon-manager][9]. Marc Weber wrote it for exactly this reason, it
supports simple dependency management. E.g. all you need is this line in your
`.vimrc`:
2014-09-27 15:32:18 +00:00
```vim
" assuming you want to use snipmate snippet engine
ActivateAddons vim-snippets snipmate
```
[vim-pi](https://bitbucket.org/vimcommunity/vim-pi/issue/90/we-really-need-a-web-interface)
Is the place to discuss plugin managers and repository resources.
2018-09-25 00:40:17 +00:00
For snipMate installation instructions, please see [snipmate@garbas][1].
2018-09-25 00:40:17 +00:00
Pull requests adding installation instructions for Pathogen, Bundle, git clone,
etc. are welcome and much appreciated.
2018-09-25 00:40:17 +00:00
Getting help
------------
2014-09-27 15:32:18 +00:00
2018-09-25 00:40:17 +00:00
If you still have trouble getting this to work, please create a GitHub issue.
2018-09-25 00:40:17 +00:00
Things to consider when contributing
------------------------------------
2013-07-17 23:06:05 +00:00
Some snippets are useful for almost all languages, so let's try to have the same
triggers for them:
```
if : if without else
ife: if $1 else $2
eif : else if ($1) { .. }
el : else ..
wh : while (cond) ...
2013-07-17 23:06:05 +00:00
```
2014-09-27 15:32:18 +00:00
Don't add useless placeholder default texts like:
2013-07-17 23:06:05 +00:00
```
if (${1:condition}){
2017-02-11 13:01:38 +00:00
${0:some code here}
2013-07-17 23:06:05 +00:00
}
```
instead use:
```
if (${1}){
2017-02-11 13:01:38 +00:00
${0:${VISUAL}}
2013-07-17 23:06:05 +00:00
}
```
2014-09-27 15:32:18 +00:00
Exception: Functions which are used less often, such as Vim's `matchall()`, `matchstr()`
2013-07-17 23:06:05 +00:00
functions which case hints may be helpful to remember order. In the VimL case
get vim-dev plugin which has function completion
Thus for conditions (while, if ..) and block bodies just use ${N} - Thanks
2017-02-11 13:01:38 +00:00
When the snippet can be used to wrap existing code leverage `${VISUAL}`
2013-07-17 23:06:05 +00:00
Open questions:
What about one line if ee then .. else .. vs if \n .. then \n ... \n else \n .. ?
Which additional policies to add?
2013-07-17 23:06:05 +00:00
Discuss at: https://github.com/honza/vim-snippets/issues/230
2014-07-02 11:18:18 +00:00
*folding markers*:
Until further work is done on `vim-snipmate`, please don't add folding markers
into snippets. `vim-snipmate` has some comments about how to patch all snippets
on the fly adding those.
2022-08-08 13:45:56 +00:00
Currently all snippets from UltiSnips have been put into `/UltiSnips` - some work
2014-07-02 11:18:18 +00:00
on merging should be done (dropping duplicates etc). Also see engines section above.
2013-07-17 23:06:05 +00:00
2024-01-07 15:14:20 +00:00
Since UltiSnips supports both UltiSnip and vim-snipmate snippets, when
contributing fixes/new snippets, please prefer adding vim-snipmate snippets.
Related repositories
--------------------
2014-09-27 15:32:18 +00:00
We also encourage people to maintain sets of snippets for particular use cases
so that all users can benefit from them. People can list their snippet repositories here:
2014-09-27 15:32:18 +00:00
* https://github.com/rbonvall/snipmate-snippets-bib (snippets for BibTeX files)
* https://github.com/sudar/vim-arduino-snippets (snippets for Arduino files)
* https://github.com/zedr/zope-snipmate-bundle.git (snippets for Python, TAL and ZCML)
* https://github.com/bonsaiben/bootstrap-snippets (snippets for Twitter Bootstrap markup, in HTML and Haml)
2016-01-05 18:18:45 +00:00
* https://github.com/sniphpets (advanced snippets for PHP, Symfony 2/3, Doctrine and etc.)
2014-09-27 15:32:18 +00:00
Installation using VAM: https://github.com/MarcWeber/vim-addon-manager
2018-09-25 00:40:17 +00:00
Future ideas and examples
-------------------------
2013-07-17 23:06:05 +00:00
[overview snippet engines](http://vim-wiki.mawercer.de/wiki/topic/text-snippets-skeletons-templates.html)
If you have ideas you can add them to that list of "snippet engine features by example".
Historical notes
----------------
[vim-snipmate][1] was originally started by [Michael Sanders][2] who has now
unfortunately abandoned the project. [Rok Garbas][3] is now maintaining a
[fork][4] of the project in hopes of improving the existing code base.
2013-05-04 20:32:47 +00:00
Versions / dialects / ..
========================
2014-09-27 15:32:18 +00:00
2013-05-04 20:32:47 +00:00
There are some issues, such as newer language versions may require other
snippets than older. If this exists we currently recommend doing this:
2014-09-27 15:32:18 +00:00
* add snippets/ruby.snippets (common snippets)
* add snippets/ruby-1.8.snippets (1.8 only)
* add snippets/ruby-1.9.snippets (1.9 only)
2013-05-04 20:32:47 +00:00
2014-09-27 15:32:18 +00:00
then configure https://github.com/garbas/vim-snipmate this way:
2013-05-04 20:32:47 +00:00
2013-07-17 23:06:05 +00:00
```vim
let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['ruby'] = 'ruby,ruby-rails,ruby-1.9'
```
2013-05-04 20:32:47 +00:00
If it happens that you work on a project requiring ruby-1.8 snippets instead,
2014-09-27 15:32:18 +00:00
consider using `vim-addon-local-vimrc` and override the filetypes.
2013-05-04 20:32:47 +00:00
Well - of course it may not make sense to create a new file for each
ruby-library-version triplet. Sometimes postfixing a name such as
2014-09-27 15:32:18 +00:00
```
migrate_lib_20_down
migrate_lib_20_up
```
2013-05-04 20:32:47 +00:00
will do it then if syntax has changed.
Language maintainers
--------------------
No one can really be proficient in all programming languages. If you would like
to maintain snippets for a language, please get in touch.
Notes: People are interested in snippets - and their interest may wane again.
This list is kept up-to-date on a best effort basis.
2013-05-04 20:32:47 +00:00
2015-07-13 10:22:46 +00:00
* Elixir - [lpil](https://github.com/lpil), [iurifq](https://github.com/iurifq)
2015-01-18 12:58:28 +00:00
* Falcon - [steveno](https://github.com/steveno)
* HTML Django - [honza](http://github.com/honza)
2015-01-18 12:58:28 +00:00
* Javascript - [honza](http://github.com/honza)
* Markdown - [honza](http://github.com/honza)
* PHP - [chrisyue](http://github.com/chrisyue)
2015-01-18 12:58:28 +00:00
* Python - [honza](http://github.com/honza)
* Ruby - [taq](http://github.com/taq)
2013-04-26 16:17:22 +00:00
* Scala - [gorodinskiy](https://github.com/gorodinskiy)
License
-------
Just as the original snipMate plugin, all the snippets are licensed under the
terms of the MIT license.
[1]: http://github.com/garbas/vim-snipmate
[2]: http://github.com/msanders
[3]: http://github.com/garbas
[4]: http://github.com/garbas/vim-snipmate
[7]: http://github.com/SirVer/ultisnips
2018-09-25 00:40:17 +00:00
[8]: http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html
[9]: https://github.com/MarcWeber/vim-addon-manager