Snippets allow you to define custom Commands and Slash Commands that expand snippet-style templates inline.
Definition
You define a snippet by creating a template with a hooks.snippet attribute that configures the snippet. The following configuration options are supported:
slashCommand: expose the snippet via the /my-snippet notation.
order: when completing as a slash commend, use this to order suggestions (higher is lower down the list)
key: Bind the snippet to a keyboard shortcut (note: this requires to also specify the command configuration).
mac: Bind the snippet to a Mac-specific keyboard shortcut.
matchRegex (advanced use only): match the current line against a regular expression, and replace the match with the template’s body. If a caret placeholder (|^|) appears in the template’s body, the replacement body before the caret will be the replacement of the matchRegex match, and the part after that carret will be appended to the end of the line. This enables text wrapping behavior, see the example below.
insertAt: by default a snippet is inserted at the cursor position, but alternatively it can be inserted at: line-start, line-end, page-start or page-end.
Frontmatter
A template’s Frontmatter is interpreted by SilverBullet’s template engine and removed when instantiated. However, to inject frontmatter after instantiation, you can use the frontmatter attribute.
--- date: 2023-11-11 --- ## Meeting notes for 2023-11-11
.
When the page already contained frontmatter before inserting the snippet, it will be augmented with the additional frontmatter specified by the template.
Examples
A minimal example using a caret placeholder (to position the cursor after snippet insertion):
A more advanced example using matchRegex: a variant of the task template which adds a creationDateattribute at the end:
--- tags: template description: Make this a task with a creation date hooks.snippet: slashCommand: task-created matchRegex: "^(\\s*)[\\-\\*]?\\s*(\\[[ xX]\\])?\\s*" --- $1* [ ] |^| [creationDate: {{today}}]
Use
A snippet can be triggered via the specified slashCommand via /slashCommand or via and/or its associate key bindings when command, key/mac are specified.