vim-snippets


Ⅰ. 插件描述

vim-snipmate default snippets (Previously snipmate-snippets)

Ⅱ. 基本信息

创建日期:  2011-06-20
更新日期:  2年以前
使用用户:  11638
Github星:  3329
插件作者:  Honza Pokorny

Ⅲ. 安装方法

使用Vundle管理器安装

在你的.vimrc下添加:
Plugin 'honza/vim-snippets'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall

对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。

使用NeoBundle管理器安装

在你的.vimrc下添加:
NeoBundle 'honza/vim-snippets'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall

使用VimPlug管理器安装

在你的.vimrc下添加:
Plug 'honza/vim-snippets'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall

使用Pathogen管理器安装

在终端中运行以下命令:
cd ~/.vim/bundle
git clone https://github.com/honza/vim-snippets

Ⅳ. 文档说明

snipMate & UltiSnip Snippets

Build Status

This repository contains snippets files for various programming languages.

It is community-maintained and many people have contributed snippet files and
other improvements already.

Contents

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

snippets/*

it is also very powerful. It does not support vim-snippets (just listing it
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).

Which one to use? If you have python give SirVer/ultisnips 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 and cope with the
minor bugs found in the engine.

Q: Should snipMate be deprecated in favour of UltiSnips?

A: No, because snipMate is VimL, and UltiSnips requires Python.
Some people want to use snippets without having to install Vim with Python

  1. Yes - this sucks.

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.
AFAIK there is a nested-placeholder branch for snipMate too. snipMate is still
improved by Adnan Zafar. So maybe time is not ready to make a final decision yet.

github issue/discussion

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
-.vim/ftplugin/javascript.vim file. Another way is to add
autocmd FileType js UltiSnipsAddFiletypes javascript-jasmine in your .vimrc.

For more see the UltiSnips docs (:help UltiSnips).

Installation

First be aware that there are many options, see "Snippet engines" above. Second
be aware than there are tons of plugin managers which is why Marc Weber
thinks that it doesn't make sense to repeat the same repetitive information
everywhere.

The recommended way to install these snippets is by using
vim-addon-manager. Marc Weber wrote it for exactly this reason, it
supports simple dependency management. E.g. all you need is this line in your
.vimrc:

" assuming you want to use snipmate snippet engine
ActivateAddons vim-snippets snipmate

vim-pi
Is the place to discuss plugin managers and repository resources.

For snipMate installation instructions, please see snipmate@garbas.

Pull requests adding installation instructions for Pathogen, Bundle, git clone,

  1. are welcome and much appreciated.

Getting help

If you still have trouble getting this to work, please create a GitHub issue.

Things to consider when contributing

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

Don't add useless placeholder default texts like:

if (${1:condition}){
  ${0:some code here}
}

instead use:

if (${1}){
  ${0:${VISUAL}}
}

Exception: Functions which are used less often, such as Vim's matchall(), matchstr()
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

When the snippet can be used to wrap existing code leverage ${VISUAL}

Open questions:
What about one line if ee then .. else .. vs if n .. then n ... n else n .. ?
Which additional policies to add?
Discuss at: https://github.com/honza/vim-snippets/issues/230

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.

Currently all snippets from UltiSnips have been put into UltiSnips - some work
on merging should be done (dropping duplicates etc). Also see engines section above.

Related repositories

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:

Installation using VAM: https://github.com/MarcWeber/vim-addon-manager

Future ideas and examples

overview snippet engines
If you have ideas you can add them to that list of "snippet engine features by example".

Historical notes

vim-snipmate was originally started by Michael Sanders who has now
unfortunately abandoned the project. Rok Garbas is now maintaining a
fork of the project in hopes of improving the existing code base.

Versions / dialects / ..

There are some issues, such as newer language versions may require other
snippets than older. If this exists we currently recommend doing this:

  • add snippets/ruby.snippets (common snippets)
  • add snippets/ruby-1.8.snippets (1.8 only)
  • add snippets/ruby-1.9.snippets (1.9 only)

then configure https://github.com/garbas/vim-snipmate this way:

let g:snipMate = {}
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases['ruby'] = 'ruby,ruby-rails,ruby-1.9'

If it happens that you work on a project requiring ruby-1.8 snippets instead,
consider using vim-addon-local-vimrc and override the filetypes.

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

migrate_lib_20_down
migrate_lib_20_up

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.

License

Just as the original snipMate plugin, all the snippets are licensed under the
terms of the MIT license.

添加新评论