mirror of
https://github.com/joaotavora/yasnippet.git
synced 2025-10-13 13:13:03 +00:00
169 lines
5.9 KiB
Markdown
169 lines
5.9 KiB
Markdown
[](https://travis-ci.org/joaotavora/yasnippet)
|
|
|
|
# Intro
|
|
|
|
**YASnippet** is a template system for Emacs. It allows you to
|
|
type an abbreviation and automatically expand it into function
|
|
templates. Bundled language templates include: C, C++, C#, Perl,
|
|
Python, Ruby, SQL, LaTeX, HTML, CSS and more. The snippet syntax
|
|
is inspired from [TextMate's][textmate-snippets] syntax, you can
|
|
even [import](#import) most TextMate templates to
|
|
YASnippet. Watch [a demo on YouTube][youtube-demo].
|
|
|
|
[textmate-snippets]: http://manual.macromates.com/en/snippets
|
|
[youtube-demo]: http://www.youtube.com/watch?v=ZCGmZK4V7Sg
|
|
|
|
# Installation
|
|
|
|
## Manual install from Git
|
|
|
|
Clone this repository somewhere
|
|
|
|
$ cd ~/.emacs.d/plugins
|
|
$ git clone --recursive https://github.com/joaotavora/yasnippet
|
|
|
|
Add the following in your `.emacs` file:
|
|
|
|
(add-to-list 'load-path
|
|
"~/.emacs.d/plugins/yasnippet")
|
|
(require 'yasnippet)
|
|
(yas-global-mode 1)
|
|
|
|
Add your own snippets to `~/.emacs.d/snippets` by placing files there or invoking `yas-new-snippet`.
|
|
|
|
## Install with `package-install`
|
|
|
|
In a recent emacs `M-x list-packages` is the recommended way to list
|
|
and install packages.
|
|
It's available from [GNU ELPA][gnuelpa].
|
|
If you need a very recent snapshot, you can get it from
|
|
[GNU-devel ELPA][gnudevel] as well as [MELPA][melpa]
|
|
(see http://melpa.org/#installing).
|
|
|
|
## Install with el-get
|
|
|
|
El-get is another nice way to get the most recent version, too. See
|
|
https://github.com/dimitri/el-get for instructions.
|
|
|
|
## Use `yas-minor-mode` on a per-buffer basis
|
|
|
|
To use YASnippet as a non-global minor mode, don't call
|
|
`yas-global-mode`; instead call `yas-reload-all` to load the snippet
|
|
tables and then call `yas-minor-mode` from the hooks of major-modes
|
|
where you want YASnippet enabled.
|
|
|
|
(yas-reload-all)
|
|
(add-hook 'prog-mode-hook #'yas-minor-mode)
|
|
|
|
# Where are the snippets?
|
|
|
|
<a name="import"></a>
|
|
|
|
YASnippet no longer bundles snippets directly, but it's very easy to
|
|
get some!
|
|
|
|
1. [yasnippet-snippets] - a snippet collection package maintained by
|
|
[AndreaCrotti](https://github.com/AndreaCrotti).
|
|
|
|
It can be installed with `M-x package-install RET
|
|
yasnippet-snippets` if you have added MELPA to your package
|
|
sources.
|
|
|
|
2. [yasmate] a tool which is dedicated to converting textmate bundles
|
|
into yasnippet snippets.
|
|
|
|
To use these snippets you have to run the tool first, so
|
|
[see its doc][yasmate]), and then point the `yas-snippet-dirs`
|
|
variable to the `.../yasmate/snippets` subdir.
|
|
3. [textmate-to-yas.el]
|
|
|
|
This is another textmate bundle converting tool using Elisp
|
|
instead of Ruby.
|
|
|
|
Naturally, you can point `yas-snippet-dirs` to good snippet collections out
|
|
there. If you have created snippets for a mode, or multiple modes,
|
|
consider creating a repository to host them, then tell users that it
|
|
should be added like this to `yas-snippet-dirs`:
|
|
|
|
(setq yas-snippet-dirs
|
|
'("~/.emacs.d/snippets" ;; personal snippets
|
|
"/path/to/some/collection/" ;; foo-mode and bar-mode snippet collection
|
|
"/path/to/yasnippet/yasmate/snippets" ;; the yasmate collection
|
|
))
|
|
|
|
(yas-global-mode 1) ;; or M-x yas-reload-all if you've started YASnippet already.
|
|
|
|
# Manual, issues etc
|
|
|
|
There's comprehensive [documentation][docs] on using and customising
|
|
YASnippet.
|
|
|
|
There's a [list of support issues][support-issues], with solutions to
|
|
common problems and practical snippet examples.
|
|
|
|
The [Github issue tracker][issues] is where most YASnippet-related
|
|
discussion happens. Nevertheless, since YASnippet is a part of Emacs,
|
|
you may alternatively report bugs to Emacs via `M-x report-emacs-bug` or
|
|
sending an email to `bug-gnu-emacs@gnu.org`, putting "yasnippet"
|
|
somewhere in the subject.
|
|
|
|
## Important note regarding bug reporting
|
|
|
|
Your bug reports are very valuable.
|
|
|
|
The most important thing when reporting bugs is making sure that we have
|
|
a way to reproduce the problem exactly like it happened to you.
|
|
|
|
To do this, we need to rule out interference from external factors
|
|
like other Emacs extensions or your own customisations.
|
|
|
|
Here's an example report that "sandboxes" an Emacs session just for
|
|
reproducing a bug.
|
|
|
|
```
|
|
$ emacs --version
|
|
Emacs 24.3
|
|
$ cd /tmp/
|
|
$ git clone https://github.com/joaotavora/yasnippet.git yasnippet-bug
|
|
$ cd yasnippet-bug
|
|
$ git log -1 --oneline
|
|
6053db0 Closes #527: Unbreak case where yas-fallback-behaviour is a list
|
|
$ HOME=$PWD emacs -L . # This "sandboxes" your emacs, melpa configuration, etc
|
|
|
|
(require 'yasnippet)
|
|
(yas-global-mode 1)
|
|
|
|
When I open a foo-mode file I don't see foo-mode under the "YASnippet" menu!
|
|
OR
|
|
When loading yasnippet I see "Error: failed to frobnicate"!
|
|
```
|
|
|
|
Using `emacs -Q` or temporarily moving your `.emacs` init file to the side
|
|
is another way to achieve good reproducibility.
|
|
|
|
Here's a
|
|
[another example](https://github.com/joaotavora/yasnippet/issues/318)
|
|
of a bug report. It has everything needed for a successful analysis
|
|
and speedy resolution.
|
|
|
|
Also, don't forget to state the Emacs version (use `M-x emacs-version`) and
|
|
the yasnippet version you are using (if using the latest from github,
|
|
do `git log -1` in the dir).
|
|
|
|
Any more info is welcome, but don't just paste a backtrace or an error
|
|
message string you got, unless we ask for it.
|
|
|
|
Finally, thank you very much for using YASnippet!
|
|
|
|
[docs]: http://joaotavora.github.io/yasnippet/
|
|
[issues]: https://github.com/joaotavora/yasnippet/issues
|
|
[support-issues]: https://github.com/joaotavora/yasnippet/issues?q=label%3Asupport
|
|
[googlecode tracker]: http://code.google.com/p/yasnippet/issues/list
|
|
[forum]: http://groups.google.com/group/smart-snippet
|
|
[melpa]: http://melpa.milkbox.net/
|
|
[gnuelpa]: http://elpa.gnu.org/packages/yasnippet.html
|
|
[gnudevel]: http://elpa.gnu.org/devel/yasnippet.html
|
|
[yasmate]: http://github.com/joaotavora/yasmate
|
|
[textmate-to-yas.el]: https://github.com/mattfidler/textmate-to-yas.el
|
|
[yasnippet-snippets]: http://github.com/AndreaCrotti/yasnippet-snippets
|