# A valid snippet should starts with: # # snippet trigger_word [ "description" [ options ] ] # # and end with: # # endsnippet # # Snippet options: # # b - Beginning of line. # i - In-word expansion. # w - Word boundary. # r - Regular expression # e - Custom context snippet # A - Snippet will be triggered automatically, when condition matches. # # Basic example: # # snippet emitter "emitter properties" b # private readonly ${1} = new Emitter<$2>() # public readonly ${1/^_(.*)/$1/}: Event<$2> = this.$1.event # endsnippet # # Online reference: https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt global !p from datetime import datetime from math import factorial import subprocess import re import sys ZOTERO_BASE = "http://127.0.0.1:23119/better-bibtex/cayw" FENCES = { "i": "idea", "q": "question", "n": "note", "t": "thought", } def math_inline(): return vim.command_output('GetContext') == 'math_inline' def math_block(): return vim.command_output('GetContext') == 'math_block' def math(): return math_inline() or math_block() def code_block(): return vim.command_output('GetContext') == 'pandocDelimitedCodeBlock' def code_inline(): return vim.command_output('GetContext') == 'pandocNoFormatted' def code(): return code_inline() or code_block() def linkify(text, link): return f"[{text}]({link})" def zot(action): if action == "get_title": cmd = f"curl -s '{ZOTERO_BASE}?format=json&selected=1' | jq '.[].title' -r" elif action == "get_citekey": cmd = f"curl -s '{ZOTERO_BASE}?format=pandoc&selected=1'" elif action == "get_citekey_brackets": cmd = f"curl -s '{ZOTERO_BASE}?format=pandoc&selected=1&brackets=1'" elif action == "get_link": link_path = re.sub("^@", "", zot("get_citekey")) link_title = zot("get_title") link = linkify(link_title, link_path) return link elif action == "get_file": link_path = re.sub("^@", "", zot("get_citekey")) link_title = zot("get_title") link = linkify(link_title, f"file://{link_path}.pdf") return link else: return "Zotero action not found" return subprocess.check_output(cmd, shell=True).decode("utf-8").strip() endglobal snippet ctx "Context" i `!p snip.rv = vim.command_output('GetContext')` endsnippet # General markdown snippet ^h "Markdown header" r # $1 endsnippet snippet ^sec "Markdown section" r ## $1 endsnippet snippet ^ssec "Markdown subsection" r ### $1 endsnippet snippet ^sex "Markdown example section" r ## Example: $1 endsnippet snippet ^ssex "Markdown example subsection" r ### Example: $1 endsnippet # Zettelkasten templating snippet nl *nld*: $1 endsnippet snippet eng *eng*: $1 endsnippet snippet fr *fra*: $1 endsnippet snippet (de *deu*: $1 endsnippet snippet (nl (*nld*: $1) endsnippet snippet (eng (*eng*: $1) endsnippet snippet (fr (*fra*: $1) endsnippet snippet (de (*deu*: $1) endsnippet snippet in (In [$1]($2))$3 endsnippet snippet liwhat "What?" A `!p snip.rv = "* [What?](" + snip.basename + "_what)"`$1 endsnippet snippet liwhy "Why?" A `!p snip.rv = "* [Why?](" + snip.basename + "_why)"`$1 endsnippet snippet < "Comment (html)" $2 endsnippet snippet <. "Comment (html) ..." i $1 endsnippet snippet endsnippet snippet endsnippet snippet endsnippet snippet endsnippet snippet td "Todo" TODO${1:: $2} endsnippet snippet ref "References" endsnippet snippet sort "Sort" endsnippet snippet foot "Footnotes" [^0]: endsnippet snippet def "Definition" **Definition${1:: $2}**${3: [${4:citation}${5:, ${6:pointer}}]} $7 ___ endsnippet snippet theo "Theorem" **Theorem${1:: $2}**${3: [${4:citation}${5:, ${6:pointer}}]} $7 ${8/(\w+).*/**Theorem** \n\n.../} ___ endsnippet snippet prop "Property" **Property $1** [@] $2 ___ endsnippet snippet lemm "Lemma" **Lemma $1** [@] $2 ___ endsnippet snippet coro "Corollary" **Corollary $1** [@] $2 ___ endsnippet # Greek symbols context "math()" snippet alpha "Alpha" \\alpha endsnippet context "math()" snippet beta "Beta" \\beta endsnippet context "math()" snippet gamma "Gamma" \\gamma endsnippet context "math()" snippet delta "Delta" \\delta endsnippet context "math()" snippet epsilon "Epsilon" \\epsilonilon endsnippet context "math()" snippet zeta "Zeta" \\zeta endsnippet context "math()" snippet eta "Eta" \\eta endsnippet context "math()" snippet theta "Theta" \\theta endsnippet context "math()" snippet iota "Iota" \\iota endsnippet context "math()" snippet kappa "Kappa" \\kappa endsnippet context "math()" snippet lambda "Lambda" i \\lambda endsnippet context "math()" snippet mu "Mu" \\mu endsnippet context "math()" snippet nu "Nu" \\nu endsnippet context "math()" snippet xi "Xi" \\xi endsnippet context "math()" snippet omicron "Omicron" \\omicron endsnippet context "math()" snippet pi "Pi" \\pi endsnippet context "math()" snippet rho "Rho" \\rho endsnippet context "math()" snippet sigma "Sigma" \\sigma endsnippet context "math()" snippet tau "Tau" \\tau endsnippet context "math()" snippet upsilon "Upsilon" \\upsilon endsnippet context "math()" snippet phi "Phi" \\phi endsnippet context "math()" snippet chi "Chi" \\chi endsnippet context "math()" snippet psi "Psi" \\psi endsnippet context "math()" snippet omega "Omega" \\omega endsnippet context "math()" snippet Gamma "Gamma" \\Gamma endsnippet context "math()" snippet Delta "Delta" \\Delta endsnippet context "math()" snippet Theta "Theta" \\Theta endsnippet context "math()" snippet Lambda "Lambda" \\Lambda endsnippet context "math()" snippet Xi "Xi" \\Xi endsnippet context "math()" snippet Pi "Pi" \\Pi endsnippet context "math()" snippet Sigma "Sigma" \\Sigma endsnippet context "math()" snippet Upsilon "Upsilon" \\Upsilon endsnippet context "math()" snippet Phi "Phi" \\Phi endsnippet context "math()" snippet Psi "Psi" \\Psi endsnippet context "math()" snippet Omega "Omega" \\Omega endsnippet snippet asaw "Als en slechts als (woorden)" i als en slechts als endsnippet snippet iffw "If and only if (words)" i if and only if endsnippet snippet asas "Als en slechts als (shorthand)" i **asa** endsnippet snippet iffs "If and only if (shorthand)" i **iff** endsnippet snippet beg "Begin" \begin{$1} $2 \end{$1} endsnippet snippet align "" i \begin{align} $1 \end{align} endsnippet snippet cases "" i \begin{cases} $1 \\\\ $2 \end{cases} $3 endsnippet snippet tik "Tikzpicture" i \begin{tikzpicture} $1 \end{tikzpicture} endsnippet snippet matrix "Matrix" i \begin{bmatrix} $1 \end{bmatrix} endsnippet # Insert anything after m/M in math mode snippet "(\b)m(.*)" "MathJax" r `!p snip.rv = match.group(1) + "$" + match.group(2) + "$"` endsnippet snippet (\b)M(.*) "MathJax block" irw $$ `!p snip.rv = match.group(2)` $$ endsnippet # Calligraphic letters context "math()" snippet c([A-z]) "Calligraphic A" r `!p snip.rv = "\\mathcal{" + match.group(1) + "}"`$1 endsnippet # Subscripts context "math()" snippet '([A-z])(\w+)' "Subscripts" irw `!p snip.rv = match.group(1) + '_' + match.group(2) if len(match.group(2)) == 1 else match.group(1) + '_{' + match.group(2) + '}'`$1 endsnippet # MathJax snippet fa "For all" i \forall endsnippet snippet frac "" i \frac{$1}{$2}$3 endsnippet snippet set "" i \\{$1\\}$2 endsnippet snippet N "" i \mathbb{N} endsnippet snippet N0 "" i \mathbb{N}_0 endsnippet snippet N+ "" i \mathbb{N}^+ endsnippet snippet Z "" i \mathbb{Z} endsnippet snippet Z0 "" i \mathbb{Z}_0 endsnippet snippet Z+ "" i \mathbb{Z}^+ endsnippet snippet R "" i \mathbb{R} endsnippet snippet R0 "" i \mathbb{R}_0 endsnippet snippet R+ "" i \mathbb{R}^+ endsnippet snippet C "" i \mathbb{C} endsnippet snippet lim "" i \lim_{$1}$2 endsnippet snippet limn "" i \lim_{n \to \infty}$2 endsnippet snippet binom "" i \binom{$1}{$2}$3 endsnippet snippet andmath "description" i \text{ and } endsnippet snippet enmath "description" i \text{ en } endsnippet snippet lra "MathJax: long right arrow" i \longrightarrow endsnippet snippet Ra "MathJax: right arrow" i \Rightarrow endsnippet snippet Im "MathJax: image operator" i \operatorname{Im} endsnippet snippet ggd "Grootste gemene deler" i \operatorname{ggd} endsnippet snippet fl "Floating point" i \operatorname{fl} endsnippet snippet Var "Variance" i \operatorname{Var} endsnippet snippet E "Expectation" i \operatorname{E} endsnippet snippet Cov "Covariance" i \operatorname{Cov} endsnippet context "math()" i snippet ntup "Alpha" (x_1, \ldots, x_n) endsnippet snippet mxn "Matrix" i m \times n endsnippet snippet mxn- "Matrix" i $m \times n$-matrix endsnippet snippet nxn "Matrix" i n \times n endsnippet snippet det "Determinant" i \operatorname{det}(${1:A})$2 endsnippet snippet det| "Determinant alternative notation" i |${1:A}|$2 endsnippet snippet Span "Span" i \operatorname{Span}\\{$1\\}$2 endsnippet snippet Nul "Null" i \operatorname{Nul}($1)$2 endsnippet snippet Col "Column space" i \operatorname{Col}($1)$2 endsnippet snippet kern "Kernel" i \operatorname{kern}($1)$2 endsnippet context "math()" snippet vec "Vector" i \mathbf{$1}$2 endsnippet context "math()" snippet vec([A-z]) "Vector ..." r `!p snip.rv = "\\mathbf{" + match.group(1) + "}"`$1 endsnippet snippet v1tovp "Vectors v indexed from 1 to p" \mathbf{v_1},...,\mathbf{v_p}$2 endsnippet snippet a1toan "Vectors a indexed from 1 to n" \mathbf{a_1},...,\mathbf{v_n}$2 endsnippet snippet .. "Dot dot dot" i \dots $1 endsnippet snippet text "MathJax text" i \text{$1}$2 endsnippet snippet leq "Less than or equal to" i \leq endsnippet snippet leq "Greater than or equal to" i \geq endsnippet snippet eat "Evaluated at" i {\biggr\rvert}_{$1}$2 endsnippet snippet sketch "Link a sketch" i [$1](file:///home/h/sketches/$2) endsnippet snippet deck "Get anki deck" `get-anki-decks` endsnippet # snippet ` "Inline code" i # `$1` # endsnippet # Escape backticks snippet `` "Code block" bA \`\`\`$1 $2 \`\`\` endsnippet snippet `tex "Latex block (see latex filter)" bA \`\`\`{.tex} $1 \`\`\` endsnippet snippet `tik "Tikz block (see tikz filter)" bA \`\`\`{.tex} \\begin{tikzpicture} $1 \\end{tikzpicture} \`\`\` endsnippet snippet task "Task" i * [ ] $1 -- pro:$2 endsnippet snippet "(\b)fn(\d+)" "" ir `!p snip.rv = snip.basename + "_" + match.group(2).zfill(2)`$1 endsnippet snippet "ch(\d+)" "Link chapter" ir `!p num_str = match.group(1).zfill(2) title = 3*"." link = snip.basename + "_" + num_str snip.rv = num_str + ". " + linkify(title, link) ` endsnippet snippet "ch(\d+)to(\d+)" "Link chapters ... to ..." irA `!p for i in range(int(match.group(1)), int(match.group(2)) + 1): num_str = str(i).zfill(2) title = 3*"." link = snip.basename + "_" + num_str snip.rv += num_str + ". " + linkify(title, link) + "\n" ` endsnippet snippet cp(\d+) "Comment current page (and date)" r `!p snip.rv = ""` endsnippet snippet (\d+)! "Factorial of ..." r `!p snip.rv = factorial(int(match.group(1)))` endsnippet snippet d "Date" `!p snip.rv = datetime.now().strftime("%Y-%m-%d")` endsnippet snippet :(\w*) "Fence" r `!p snip.rv += ":::" + FENCES.get(match.group(1) or "", "") + "\n" `$1 `!p snip.rv += ":::"`$2 endsnippet snippet \[(\w*) "Fence inline" ir `!p snip.rv += "["`$1`!p snip.rv += "]{." + FENCES.get(match.group(1) or "", "") + "}"`$2 endsnippet snippet ^eg "Example" r E.g. $1 endsnippet # E.g. after list (or list preceded by space) snippet (\*\s|\*)eg "Example" r * E.g. $1 endsnippet # E.g. after dot (or dot preceded by space) snippet (\.\s|\.)eg "Example" r . E.g. $1 endsnippet snippet (?" TARGET DECK: $1::$2 endsnippet snippet clo "Cloze" START Cloze ${0:${VISUAL}}$1 END $2 endsnippet snippet clos "Cloze start" START Cloze $1 endsnippet snippet cloe "Cloze end" END endsnippet snippet clod START Cloze **Definition$1** $2 END endsnippet snippet clop START Cloze **Property$1** $2 END endsnippet snippet clot START Cloze **Theorem$1** $2 END endsnippet snippet clol START Cloze **Lemma$1** $2 END endsnippet snippet "c(\d+)" "Cloze " r {{c`!p snip.rv = int(match.group(1))`::${0:${VISUAL}}$1}}$2 endsnippet # Match preceded by whitespace or start of line snippet (?\n> --' + zot("get_citekey_brackets")` endsnippet snippet acz "According to ..." `!p snip.rv = "According to " + zot("get_citekey")` endsnippet snippet azex "As ... explains" `!p snip.rv = "As " + zot("get_citekey") + " explains, "` endsnippet snippet iz "In ..." `!p snip.rv = "In " + zot("get_citekey")` endsnippet snippet izd "In ...'s definition" `!p snip.rv = "In " + zot("get_citekey") + "'s definition, "` endsnippet snippet zintends "... intends to ..." A `!p snip.rv = zot("get_citekey") + " intends to "` endsnippet snippet tfol "The following" wA the following endsnippet snippet tfolt "It follows that" wA it follows that endsnippet snippet ntfol "In the following" wA in the following endsnippet snippet algos "algorithms" wA algorithms endsnippet snippet algo "algorithm" wA algorithm endsnippet # TODO: Make only available in tikzpicture context "code()" snippet q "State" w \node[state] ($1) [] {$2}; endsnippet context "code()" snippet q0 "Initial state" w \node[initial,state] ($1) {$2}; endsnippet