Skip to content

hikerpig/unisnips

Repository files navigation

Unisips

test codecov

Unisnips is a set of tools to parse and generate expandable snippets, aiming to be the bridge between different editor/plugin/code-expand-apps. It parses snippet sources (so far only a subset of UltiSnips is supported) and converts them to different targets.

You can keep only one set of expressive code templates - AKA snippets - and free yourself the chore of rewriting snippets to fit specifications of different platforms.

🚧 Still under active development, feel free to open issues.

See the demo site

✨ Features

Parses source to a list of interchangable data for further use

See the demo site's DEBUG panel.

Supported sources

UltiSnips

  1. TabStop
snippet subsec "most common and simple"
---------------- $1 ----------------------
----------------end $1 -------------------
endsnippet

snippet with_default "with default value"
function ${1:name} {
  ${2://body}
}
endsnippet

snippet nested "nested tabstop"
${0:outer and ${1://inner}}
endsnippet
  1. 'VISUAL' placeholder
snippet ret  "return value"
ret ${VISUAL}
endsnippet
  1. script code block
snippet test_shell "shell code"
should print date: `! date`
endsnippet

snippet test_js "javascript code"
should print date: `!js new Date()`
endsnippet
  1. transformations
snippet tabstop_transformation "import vue component"
import ${1/(.*)\/([\w]*)\.vue/$2/g} from '${1}'
endsnippet

Supported targets

Supported conversion features

Features \ Targets vscode atom sublime jetbrains
Simple Tabstop
Nested Tabstop
'VISUAL' placeholder
Transformations 🅿️ Partial support
Script code block

Partial support explations

partial-transformations

A transformation can be describe as /pattern/replacement/options .

You can reference matched groups by '$1' '$2' in replacement string, but Special Replacement String like \u \l is not yet supported.

And the differences between languages' regular expression will result in different behaviors.

Usage

Node cli

Install

npm i -g @unisnips/unisnips
# or
yarn global add @unisnips/unisnips

Example

unisnips convert --target vscode -i ~/.vim/Ultisnips/typescript.snippets -o ~/vscodesnippets/typescript.json

Roadmaps

  • Port a subset of UltiSnips parser to TypeScript, enable some basic and mostly used features

  • Add more builtin variables, may be useful in some targets (such as vscode's $CURRENT_YEAR)

  • Parses transformations and convert them to vscode