mirror of
https://github.com/joaotavora/yasnippet.git
synced 2025-10-14 13:33:04 +00:00
link to docstring ref; fix other links, formatting
This commit is contained in:
parent
7b82424735
commit
e46d9c7410
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
You can use YASnippet to expand snippets in different ways:
|
You can use YASnippet to expand snippets in different ways:
|
||||||
|
|
||||||
- When =yas-minor-mode= is active:
|
- When [[sym:yas-minor-mode][=yas-minor-mode=]] is active:
|
||||||
- Type the snippet's *trigger key* then calling [[sym:yas-expand][=yas-expand=]]
|
- Type the snippet's *trigger key* then calling [[sym:yas-expand][=yas-expand=]]
|
||||||
(bound to =TAB= by default).
|
(bound to =TAB= by default).
|
||||||
|
|
||||||
@ -31,10 +31,10 @@
|
|||||||
|
|
||||||
*** Trigger key
|
*** Trigger key
|
||||||
|
|
||||||
=yas-expand= tries to expand a /snippet abbrev/ (also known as
|
[[sym:yas-expand][=yas-expand=]] tries to expand a /snippet abbrev/ (also known as
|
||||||
/snippet key/) before point.
|
/snippet key/) before point.
|
||||||
|
|
||||||
When =yas-minor-mode= is enabled, it binds [[sym:yas-expand][=yas-expand=]] to =TAB= and
|
When [[sym:yas-minor-mode][=yas-minor-mode=]] is enabled, it binds [[sym:yas-expand][=yas-expand=]] to =TAB= and
|
||||||
=<tab>= by default, however, you can freely set it to some other key:
|
=<tab>= by default, however, you can freely set it to some other key:
|
||||||
|
|
||||||
#+begin_src emacs-lisp :exports code
|
#+begin_src emacs-lisp :exports code
|
||||||
@ -46,26 +46,26 @@ When =yas-minor-mode= is enabled, it binds [[sym:yas-expand][=yas-expand=]] to =
|
|||||||
[[./images/minor-mode-indicator.png]]
|
[[./images/minor-mode-indicator.png]]
|
||||||
|
|
||||||
To enable the YASnippet minor mode in all buffers globally use the
|
To enable the YASnippet minor mode in all buffers globally use the
|
||||||
command =yas-global-mode=.
|
command [[sym:yas-global-mode][=yas-global-mode=]].
|
||||||
|
|
||||||
When you use =yas-global-mode= you can also selectively disable
|
When you use [[sym:yas-global-mode][=yas-global-mode=]] you can also selectively disable
|
||||||
YASnippet in some buffers by setting the buffer-local variable
|
YASnippet in some buffers by setting the buffer-local variable
|
||||||
=yas-dont-active= in the buffer's mode hook.
|
[[sym:yas-dont-active][=yas-dont-active=]] in the buffer's mode hook.
|
||||||
|
|
||||||
**** Fallback bahaviour
|
**** Fallback bahaviour
|
||||||
|
|
||||||
=yas-fallback-behaviour= is a customization variable bound to
|
[[sym:yas-fallback-behaviour][=yas-fallback-behaviour=]] is a customization variable bound to
|
||||||
='call-other-command= by default. If =yas-expand= failed to find any
|
'=call-other-command= by default. If [[sym:yas-expand][=yas-expand=]] failed to find any
|
||||||
suitable snippet to expand, it will disable the minor mode temporarily
|
suitable snippet to expand, it will disable the minor mode temporarily
|
||||||
and find if there's any other command bound the =yas-trigger-key=.
|
and find if there's any other command bound the [[sym:yas-trigger-key][=yas-trigger-key=]].
|
||||||
|
|
||||||
If found, the command will be called. Usually this works very well
|
If found, the command will be called. Usually this works very well
|
||||||
--when there's a snippet, expand it, otherwise, call whatever command
|
--when there's a snippet, expand it, otherwise, call whatever command
|
||||||
originally bind to the trigger key.
|
originally bind to the trigger key.
|
||||||
|
|
||||||
However, you can change this behavior by customizing the
|
However, you can change this behavior by customizing the
|
||||||
=yas-fallback-behavior= variable. If you set this variable to
|
[[sym:yas-fallback-behavior][=yas-fallback-behavior=]] variable. If you set this variable to
|
||||||
='return-nil=, it will return =nil= instead of trying to call the
|
'=return-nil=, it will return =nil= instead of trying to call the
|
||||||
/original/ command when no snippet is found.
|
/original/ command when no snippet is found.
|
||||||
|
|
||||||
*** Insert at point
|
*** Insert at point
|
||||||
@ -80,34 +80,34 @@ according to the condition system. If you want to see all applicable
|
|||||||
snippets for the major mode, prefix this command with =C-u=.
|
snippets for the major mode, prefix this command with =C-u=.
|
||||||
|
|
||||||
The prompting methods used are again controlled by
|
The prompting methods used are again controlled by
|
||||||
=yas-prompt-functions=.
|
[[sym:yas-prompt-functions][=yas-prompt-functions=]].
|
||||||
|
|
||||||
*** Snippet keybinding
|
*** Snippet keybinding
|
||||||
|
|
||||||
See the section of the =# binding:= directive in
|
See the section of the =# binding:= directive in
|
||||||
[[snippet-development.html][Writing Snippets]].
|
[[./snippet-development.org][Writing Snippets]].
|
||||||
|
|
||||||
*** Expanding from the menu
|
*** Expanding from the menu
|
||||||
|
|
||||||
See [[snippet-menu.html][the YASnippet Menu]].
|
See [[./snippet-menu.org][the YASnippet Menu]].
|
||||||
|
|
||||||
*** Expanding with =hippie-expand=
|
*** Expanding with =hippie-expand=
|
||||||
|
|
||||||
To integrate with =hippie-expand=, just put =yas-hippie-try-expand= in
|
To integrate with =hippie-expand=, just put [[sym:yas-hippie-try-expand][=yas-hippie-try-expand=]] in
|
||||||
=hippie-expand-try-functions-list=. This probably makes more sense when
|
=hippie-expand-try-functions-list=. This probably makes more sense when
|
||||||
placed at the top of the list, but it can be put anywhere you prefer.
|
placed at the top of the list, but it can be put anywhere you prefer.
|
||||||
|
|
||||||
*** Expanding from emacs-lisp code
|
*** Expanding from emacs-lisp code
|
||||||
|
|
||||||
Sometimes you might want to expand a snippet directly from you own elisp
|
Sometimes you might want to expand a snippet directly from you own elisp
|
||||||
code. You should call =yas-expand-snippet= instead of =yas-expand= in
|
code. You should call [[sym:yas-expand-snippet][=yas-expand-snippet=]] instead of [[sym:yas-expand][=yas-expand=]] in
|
||||||
this case.
|
this case.
|
||||||
|
|
||||||
As with expanding from the menubar, the condition system and multiple
|
As with expanding from the menubar, the condition system and multiple
|
||||||
candidates doesn't affect expansion. In fact, expanding from the
|
candidates doesn't affect expansion. In fact, expanding from the
|
||||||
YASnippet menu has the same effect of evaluating the follow code:
|
YASnippet menu has the same effect of evaluating the follow code:
|
||||||
|
|
||||||
See the internal documentation on =yas-expand-snippet= for more
|
See the internal documentation on [[sym:yas-expand-snippet][=yas-expand-snippet=]] for more
|
||||||
information.
|
information.
|
||||||
|
|
||||||
** Controlling expansion
|
** Controlling expansion
|
||||||
@ -122,7 +122,7 @@ In particular, the following things matter:
|
|||||||
- Currently loaded snippets tables
|
- Currently loaded snippets tables
|
||||||
|
|
||||||
These are loaded from a directory hierarchy in your file system. See
|
These are loaded from a directory hierarchy in your file system. See
|
||||||
[[snippet-organization.html][Organizing Snippets]]. They are named
|
[[./snippet-organization.org][Organizing Snippets]]. They are named
|
||||||
after major modes like =html-mode=, =ruby-mode=, etc...
|
after major modes like =html-mode=, =ruby-mode=, etc...
|
||||||
|
|
||||||
- Major mode of the current buffer
|
- Major mode of the current buffer
|
||||||
@ -138,7 +138,7 @@ In particular, the following things matter:
|
|||||||
also considered. This works recursively, i.e. parents of parents of
|
also considered. This works recursively, i.e. parents of parents of
|
||||||
eligible tables are also considered.
|
eligible tables are also considered.
|
||||||
|
|
||||||
- Buffer-local =yas-mode-symbol= variable
|
- Buffer-local [[sym:yas-mode-symbol][=yas-mode-symbol=]] variable
|
||||||
|
|
||||||
This can be used to consider snippet tables whose name does not
|
This can be used to consider snippet tables whose name does not
|
||||||
correspond to a major mode. If you set this variable to a name , like
|
correspond to a major mode. If you set this variable to a name , like
|
||||||
@ -146,7 +146,7 @@ In particular, the following things matter:
|
|||||||
minor mode. Naturally, you want to set this conditionally, i.e. only
|
minor mode. Naturally, you want to set this conditionally, i.e. only
|
||||||
when entering that minor mode, so using a hook is a good idea.
|
when entering that minor mode, so using a hook is a good idea.
|
||||||
|
|
||||||
- Buffer-local =yas-buffer-local-condition= variable
|
- Buffer-local [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] variable
|
||||||
|
|
||||||
This variable provides finer grained control over what snippets can
|
This variable provides finer grained control over what snippets can
|
||||||
be expanded in the current buffer. The default value won't let you
|
be expanded in the current buffer. The default value won't let you
|
||||||
@ -156,23 +156,23 @@ In particular, the following things matter:
|
|||||||
*** The condition system
|
*** The condition system
|
||||||
|
|
||||||
Consider this scenario: you are an old Emacs hacker. You like the
|
Consider this scenario: you are an old Emacs hacker. You like the
|
||||||
abbrev-way and set =yas-trigger-key= to ="SPC"=. However, you don't want
|
abbrev-way and set [[sym:yas-trigger-key][=yas-trigger-key=]] to =SPC=. However, you don't want
|
||||||
=if= to be expanded as a snippet when you are typing in a comment block
|
=if= to be expanded as a snippet when you are typing in a comment block
|
||||||
or a string (e.g. in =python-mode=).
|
or a string (e.g. in =python-mode=).
|
||||||
|
|
||||||
If you use the =# condition := directive (see
|
If you use the =# condition := directive (see
|
||||||
[[snippet-development.html][Writing Snippets]]) you could just specify
|
[[./snippet-development.org][Writing Snippets]]) you could just specify
|
||||||
the condition for =if= to be =(not (python-in-string/comment))=. But how
|
the condition for =if= to be =(not (python-in-string/comment))=. But how
|
||||||
about =while=, =for=, etc. ? Writing the same condition for all the
|
about =while=, =for=, etc. ? Writing the same condition for all the
|
||||||
snippets is just boring. So has a buffer local variable
|
snippets is just boring. So has a buffer local variable
|
||||||
=yas-buffer-local-condition=. You can set this variable to
|
[[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]]. You can set this variable to
|
||||||
=(not (python-in-string/comment))= in =python-mode-hook=.
|
=(not (python-in-string/comment))= in =python-mode-hook=.
|
||||||
|
|
||||||
Then, what if you really want some particular snippet to expand even
|
Then, what if you really want some particular snippet to expand even
|
||||||
inside a comment? This is also possible! But let's stop telling the
|
inside a comment? This is also possible! But let's stop telling the
|
||||||
story and look at the rules:
|
story and look at the rules:
|
||||||
|
|
||||||
- If =yas-buffer-local-condition= evaluate to nil, no snippets will be
|
- If [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] evaluate to nil, no snippets will be
|
||||||
considered for expansion.
|
considered for expansion.
|
||||||
|
|
||||||
- If it evaluates to the a /cons cell/ where the =car= is the symbol
|
- If it evaluates to the a /cons cell/ where the =car= is the symbol
|
||||||
@ -204,7 +204,7 @@ story and look at the rules:
|
|||||||
|
|
||||||
- Otherwise, it won't be considered.
|
- Otherwise, it won't be considered.
|
||||||
|
|
||||||
In the mentioned scenario, set =yas-buffer-local-condition= like this
|
In the mentioned scenario, set [[sym:yas-buffer-local-condition][=yas-buffer-local-condition=]] like this
|
||||||
|
|
||||||
... and specify the condition for a snippet that you're going to expand
|
... and specify the condition for a snippet that you're going to expand
|
||||||
in comment to be evaluated to the symbol =force-in-comment=. Then it can
|
in comment to be evaluated to the symbol =force-in-comment=. Then it can
|
||||||
@ -218,7 +218,7 @@ one snippet to be expanded at point.
|
|||||||
|
|
||||||
When there are multiple candidates, YASnippet will let you select one.
|
When there are multiple candidates, YASnippet will let you select one.
|
||||||
The UI for selecting multiple candidate can be customized through
|
The UI for selecting multiple candidate can be customized through
|
||||||
=yas-prompt-functions= , which defines your preferred methods of being
|
[[sym:yas-prompt-functions][=yas-prompt-functions=]] , which defines your preferred methods of being
|
||||||
prompted for snippets.
|
prompted for snippets.
|
||||||
|
|
||||||
You can customize it with
|
You can customize it with
|
||||||
@ -227,11 +227,11 @@ can put in your emacs-file:
|
|||||||
|
|
||||||
Currently there are some alternatives solution with YASnippet.
|
Currently there are some alternatives solution with YASnippet.
|
||||||
|
|
||||||
[[images/x-menu.png]]
|
[[./images/x-menu.png]]
|
||||||
|
|
||||||
**** Use the X window system
|
**** Use the X window system
|
||||||
|
|
||||||
The function =yas-x-prompt= can be used to show a popup menu for you to
|
The function [[sym:yas-x-prompt][=yas-x-prompt=]] can be used to show a popup menu for you to
|
||||||
select. This menu will be part of you native window system widget, which
|
select. This menu will be part of you native window system widget, which
|
||||||
means:
|
means:
|
||||||
|
|
||||||
@ -241,20 +241,20 @@ means:
|
|||||||
navigate this menu.
|
navigate this menu.
|
||||||
- This function can't be used when in a terminal.
|
- This function can't be used when in a terminal.
|
||||||
|
|
||||||
[[images/ido-menu.png]]
|
[[./images/ido-menu.png]]
|
||||||
|
|
||||||
**** Minibuffer prompting
|
**** Minibuffer prompting
|
||||||
|
|
||||||
You can use functions =yas-completing-prompt= for the classic emacs
|
You can use functions [[sym:yas-completing-prompt][=yas-completing-prompt=]] for the classic emacs
|
||||||
completion method or =yas-ido-prompt= for a much nicer looking method.
|
completion method or [[sym:yas-ido-prompt][=yas-ido-prompt=]] for a much nicer looking method.
|
||||||
The best way is to try it. This works in a terminal.
|
The best way is to try it. This works in a terminal.
|
||||||
|
|
||||||
[[images/dropdown-menu.png]]
|
[[./images/dropdown-menu.png]]
|
||||||
|
|
||||||
**** Use =dropdown-menu.el=
|
**** Use =dropdown-menu.el=
|
||||||
|
|
||||||
The function =yas-dropdown-prompt= can also be placed in the
|
The function [[sym:yas-dropdown-prompt][=yas-dropdown-prompt=]] can also be placed in the
|
||||||
=yas-prompt-functions= list.
|
[[sym:yas-prompt-functions][=yas-prompt-functions=]] list.
|
||||||
|
|
||||||
This works in both window system and terminal and is customizable, you
|
This works in both window system and terminal and is customizable, you
|
||||||
can use =C-n=, =C-p= to navigate, =q= to quit and even press =6= as a
|
can use =C-n=, =C-p= to navigate, =q= to quit and even press =6= as a
|
||||||
@ -262,80 +262,5 @@ shortcut to select the 6th candidate.
|
|||||||
|
|
||||||
**** Roll your own
|
**** Roll your own
|
||||||
|
|
||||||
See below for the documentation on variable =yas-prompt-functions=
|
See the documentation on variable [[sym:yas-prompt-functions][=yas-prompt-functions=]]
|
||||||
|
|
||||||
** Customizable Variables
|
|
||||||
|
|
||||||
*** =yas-prompt-functions=
|
|
||||||
|
|
||||||
You can write a function and add it to the =yas-prompt-functions= list.
|
|
||||||
These functions are called with the following arguments:
|
|
||||||
|
|
||||||
- PROMPT: A string to prompt the user;
|
|
||||||
|
|
||||||
- CHOICES: A list of strings or objects;
|
|
||||||
|
|
||||||
- optional DISPLAY-FN : A function. When applied to each of the objects
|
|
||||||
in CHOICES it will return a string;
|
|
||||||
|
|
||||||
The return value of any function you put here should be one of the
|
|
||||||
objects in CHOICES, properly formatted with DISPLAY-FN (if that is
|
|
||||||
passed).
|
|
||||||
|
|
||||||
- To signal that your particular style of prompting is unavailable at
|
|
||||||
the moment, you can also have the function return nil.
|
|
||||||
|
|
||||||
- To signal that the user quit the prompting process, you can signal
|
|
||||||
=quit= with =(signal 'quit "user quit!")=
|
|
||||||
|
|
||||||
*** =yas-fallback-behavior=
|
|
||||||
|
|
||||||
How to act when =yas-expand= does /not/ expand a snippet.
|
|
||||||
|
|
||||||
- =call-other-command= means try to temporarily disable YASnippet
|
|
||||||
and :: call the next command bound to =yas-trigger-key=.
|
|
||||||
|
|
||||||
=return-nil= means return nil. (i.e. do nothing)
|
|
||||||
|
|
||||||
An entry (apply COMMAND . ARGS) means interactively call COMMAND, if
|
|
||||||
ARGS is non-nil, call COMMAND non-interactively with ARGS as arguments.
|
|
||||||
|
|
||||||
*** =yas-choose-keys-first=
|
|
||||||
|
|
||||||
If non-nil, prompt for snippet key first, then for template.
|
|
||||||
|
|
||||||
Otherwise prompts for all possible snippet names.
|
|
||||||
|
|
||||||
This affects =yas-insert-snippet= and =yas-visit-snippet-file=.
|
|
||||||
|
|
||||||
*** =yas-choose-tables-first=
|
|
||||||
|
|
||||||
If non-nil, and multiple eligible snippet tables, prompts user for
|
|
||||||
tables first.
|
|
||||||
|
|
||||||
Otherwise, user chooses between the merging together of all eligible
|
|
||||||
tables.
|
|
||||||
|
|
||||||
This affects =yas-insert-snippet=, =yas-visit-snippet-file=
|
|
||||||
|
|
||||||
*** =yas-key-syntaxes=
|
|
||||||
|
|
||||||
The default searching strategy is quite powerful. For example, in
|
|
||||||
=c-mode=, =bar=, =foo_bar=, ="#foo_bar"= can all be recognized as a
|
|
||||||
snippet key. Furthermore, the searching is in that order. In other
|
|
||||||
words, if =bar= is found to be a key to some /valid/ snippet, then that
|
|
||||||
snippet is expanded and replaces the =bar=. Snippets pointed to by
|
|
||||||
=foo_bar= and ="#foobar= won't be considered.
|
|
||||||
|
|
||||||
However, this strategy can also be customized easily from the
|
|
||||||
=yas-key-syntaxes= variable. It is a list of syntax rules, the default
|
|
||||||
value is =("w" "w_" "w_." "^ ")=. Which means search the following thing
|
|
||||||
until found one:
|
|
||||||
|
|
||||||
- a word.
|
|
||||||
- a symbol. In lisp, =-= and =?= can all be part of a symbol.
|
|
||||||
- a sequence of characters of either word, symbol or punctuation.
|
|
||||||
- a sequence of characters of non-whitespace characters.
|
|
||||||
|
|
||||||
But you'd better keep the default value unless you want to understand
|
|
||||||
how Emacs's syntax rules work...
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user