yasnippet/doc/index.org
Noam Postavsky 875ef77dfb move index.org subsection into snippet-organization.org
This almost completely overwrites the existing snippet-organization.org
which was imported from snippet-organization.rst via pandoc.
2013-11-26 23:09:16 -05:00

5.5 KiB

Yet another snippet extension

Quick start

YASnippet is a template system for Emacs. It allows you to type an abbreviation and automatically expand it into function templates. Bundled language templates includes: C, C++, C#, Perl, Python, Ruby, SQL, LaTeX, HTML, CSS and more. The snippet syntax is inspired from TextMate's syntax, you can even import most TextMate snippets

YASnippet is an original creation of pluskid who also wrote its predecessor smart-snippet.

Watch a demo

On youtube.

Installation

Clone this repository somewhere

$ cd ~/.emacs.d/plugins
$ git clone https://github.com/capitaomorte/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.

Import textmate snippets (rails example)

YASnippet lets you use TextMate bundles directly:

$ cd ~/.emacs.d/plugins
$ git clone https://github.com/capitaomorte/yasnippet
$ cd yasnippet
$ git submodule init
$ git submodule update
$ gem install plist trollop
$ rake convert_bundles             # will convert ruby, rails and html bundles from drnic

Then, in your .emacs file

(add-to-list 'load-path
              "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(setq yas-snippet-dirs '("~/.emacs.d/snippets" "~/.emacs.d/extras/imported"))
(yas-global-mode 1)

Open some rails file (model, app, etc) and start using the textmate snippets. Consider that this is a work-in-progress and many snippets/commands might not work. Patches welcome!

Contributing snippets

Please do not ask me to add snippets to the default collection under /snippets. This collection is considered frozen. By customizing yas-snippet-dirs you can point yasnippet to good snippet collections out there.

The extras/textmate-import.rb tool can import many actual Textmate snippets. I'm focusing on developing it and the accompanying yas-setup.el files that guide it with more difficult importations. The idea is to deprecate /snippets and replace it with extras/imported.

Documentation

The documentation has been split into separate parts:

  1. Organizing Snippets

    Describes ways to organize your snippets in the hard disk.

  2. Expanding Snippets

    Describes how YASnippet chooses snippets for expansion at point.

    Maybe, you'll want some snippets to be expanded in a particular mode, or only under certain conditions, or be prompted using ido, etc…

  3. Writing Snippets

    Describes the YASnippet definition syntax, which is very close (but not equivalent) to Textmate's. Includes a section about converting TextMate snippets.

  4. The YASnippet menu

    Explains how to use the YASnippet menu to explore, learn and modify snippets.

  5. YASnippet Symbol Reference

    An automatically generated listing of all YASnippet commands, (customization) variables, and functions.

Bugs, discussion, contributions, etc

If you think you've found a bug, please report it on the GitHub issue tracker (please do not submit new issues to the old googlecode tracker).

If you run into problems using YASnippet, or have snippets to contribute, post to the yasnippet forum. Thank you very much for using YASnippet!

Expanding Snippets

This section describes how YASnippet chooses snippets for expansion at point.

Maybe, you'll want some snippets to be expanded in a particular mode, or only under certain conditions, or be prompted using

Triggering expansion

To make a snippet expand after the cursor:

  • Type the snippet's trigger key then calling yas-expand. It's bound to TAB and <tab> by default, to change it use
  (define-key yas-minor-mode-map (kbd "<tab>") nil)
  (define-key yas-minor-mode-map (kbd "TAB") nil)
  (define-key yas-minor-mode-map (kbd "<the new key>") 'yas-expand)
  • Use the snippet's keybinding.
  • Call yas-insert-snippet (use M-x yas-insert-snippet= or its keybinding C-c & C-s).
  • By expanding directly from the "YASnippet" menu in the menu-bar
  • Using hippie-expand
  • Use m2m's excellent auto-complete