
This is just the initial conversion with pandoc, they still need to be fixed up. Also define new org files as a project in yas-doc-helper.el.
4.0 KiB
Organizing snippets
Loading snippets
Snippet definitions are stored in files in the filesystem. Unless you use the simpler bundle version), these are arranged so that YASnippet can load them into snippet tables. The triggering mechanisms (see Expanding snippets) will look up these snippet tables and (hopefully) expand the snippet you intended.
The non-bundle version of YASnippet, once unpacked, comes with a full directory of snippets, which you can copy somewhere and use. You can also create or download more directories.
Once these directories are in place reference them in the variable
yas-root-directory
and load them with yas-load-directory
:
The point in using yas-root-directory
(as opposed to calling
yas-load-directory
directly) is considering "~/emacs.d/mysnippets" for
snippet development, so you can use commands like yas-new-snippet
and
others described in section Writing
Snippets.
You can make this variable a list and store more items into it:
In this last example, the all the directories are loaded and their snippets considered for expansion. However development still happens in the first element, "~/emacs.d/mysnippets".
Organizing snippets
Once you've setup yas-root-directory
, you can store snippets inside
sub-directories of these directories.
Snippet definitions are put in plain text files. They are arranged by sub-directories, and the snippet tables are named after these directories.
The name corresponds to the Emacs mode where you want expansion to take
place. For example, snippets for c-mode
are put in the c-mode
sub-directory.
The .yas.parents
file
It's very useful to have certain modes share snippets between
themselves. To do this, choose a mode subdirectory and place a
.yas-parents
containing a whitespace-separated list of other mode
names. When you reload those modes become parents of the original mode.
The .yas-make-groups
file
If you place an empty plain text file .yas-make-groups
inside one of
the mode directories, the names of these sub-directories are considered
groups of snippets and The YASnippet Menu is
organized much more cleanly, as you can see in the image.
Another alternative way to achieve this is to place a # group:
directive inside the snippet definition. See
Writing Snippets.
YASnippet bundle
The most convenient way to define snippets for YASnippet is to put them
in a directory arranged by the mode and use yas-load-directory
to load
them.
However, this might slow down the Emacs start-up speed if you have many
snippets. You can use yas-define-snippets
to define a bunch of
snippets for a particular mode in an Emacs-lisp file.
Since this is hard to maintain, there's a better way: define your
snippets in directory and then call M-x yas-compile-bundle
to compile
it into a bundle file when you modified your snippets.
The release bundle of YASnippet is produced by yas-compile-bundle
. The
bundle uses yas-define-snippets
to define snippets. This avoids the IO
and parsing overhead when loading snippets.
Further more, the generated bundle is a stand-alone file not depending
on yasnippet.el
. The released bundles of YASnippet are all generated
this way.
See the internal documentation for these functions
M-x describe-function RET yas-define-snippets RET
M-x describe-function RET yas-compile-bundle RET
.
Customizable variables
yas-root-directory
Root directory that stores the snippets for each major mode.
If you set this from your .emacs, can also be a list of strings, for
multiple root directories. If you make this a list, the first element is
always the user-created snippets directory. Other directories are used
for bulk reloading of all snippets using yas-reload-all
yas-ignore-filenames-as-triggers
If non-nil, don't derive tab triggers from filenames.
This means a snippet without a # key:
directive wont have a tab
trigger.