From 8dbfa2dd131ef04c33e7a2964754ca643335e680 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Mon, 17 Jun 2024 13:15:15 +0200 Subject: [PATCH] nvim: Extend snippet capability Enabled snippet completion from the first letter (allowing single letter snippet prefixes). Extended the luasnip usage and added a telescope extension to show all enabled snippets for the current buffer. --- nvim/.config/nvim/lazy-lock.json | 1 + nvim/.config/nvim/lua/plugins/completion.lua | 30 +++++- nvim/.config/nvim/snippets/markdown.snippets | 80 +++++++++++++++ nvim/.config/nvim/snippets/quarto.snippets | 100 +++++++++++++++++++ 4 files changed, 206 insertions(+), 5 deletions(-) create mode 100644 nvim/.config/nvim/snippets/markdown.snippets create mode 100644 nvim/.config/nvim/snippets/quarto.snippets diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json index 8de0f21..62fd9d9 100644 --- a/nvim/.config/nvim/lazy-lock.json +++ b/nvim/.config/nvim/lazy-lock.json @@ -77,6 +77,7 @@ "smartcolumn.nvim": { "branch": "main", "commit": "d01b99355c7fab13233f48d0f28dc097e68a03f7" }, "stickybuf.nvim": { "branch": "master", "commit": "2160fcd536d81f5fa43f7167dba6634e814e3154" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "9ef21b2e6bb6ebeaf349a0781745549bbb870d27" }, + "telescope-luasnip.nvim": { "branch": "master", "commit": "11668478677de360dea45cf2b090d34f21b8ae07" }, "telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, "trouble.nvim": { "branch": "main", "commit": "09380a8ed0694dbfbbcf59f9eaac499e259cb75c" }, "twilight.nvim": { "branch": "main", "commit": "8bb7fa7b918baab1ca81b977102ddb54afa63512" }, diff --git a/nvim/.config/nvim/lua/plugins/completion.lua b/nvim/.config/nvim/lua/plugins/completion.lua index 5988ef8..cb5a3fc 100644 --- a/nvim/.config/nvim/lua/plugins/completion.lua +++ b/nvim/.config/nvim/lua/plugins/completion.lua @@ -3,6 +3,7 @@ return { { "hrsh7th/nvim-cmp", branch = "main", + version = false, dependencies = { "andersevenrud/cmp-tmux", "cbarrete/completion-vcard", @@ -19,11 +20,30 @@ return { "kdheepak/cmp-latex-symbols", "lukas-reineke/cmp-rg", "crispgm/cmp-beancount", - "ray-x/cmp-treesitter", - "saadparwaiz1/cmp_luasnip", + { "ray-x/cmp-treesitter", dependencies = { "nvim-treesitter/nvim-treesitter" } }, { - "L3MON4D3/LuaSnip", - dependencies = { "rafamadriz/friendly-snippets" }, + "saadparwaiz1/cmp_luasnip", + dependencies = { + + { + "L3MON4D3/LuaSnip", + dependencies = { + "rafamadriz/friendly-snippets", + { + "benfowler/telescope-luasnip.nvim", + dependencies = { { "nvim-telescope/telescope.nvim", optional = true } }, + config = function() + require("telescope").load_extension("luasnip") + end, + }, + }, + build = "make install_jsregexp", + config = function() + require("luasnip.loaders.from_vscode").lazy_load({ exclude = { "markdown", "quarto" } }) + require("luasnip.loaders.from_snipmate").lazy_load() + end, + }, + }, }, }, config = function() @@ -83,7 +103,7 @@ return { { name = "otter" }, { name = "nvim_lsp" }, { name = "nvim_lsp_signature_help" }, - { name = "luasnip", keyword_length = 2 }, + { name = "luasnip", keyword_length = 1 }, { name = "pandoc_references" }, { name = "calc" }, { name = "path" }, diff --git a/nvim/.config/nvim/snippets/markdown.snippets b/nvim/.config/nvim/snippets/markdown.snippets new file mode 100644 index 0000000..d4b5709 --- /dev/null +++ b/nvim/.config/nvim/snippets/markdown.snippets @@ -0,0 +1,80 @@ +# Markdown snippets +# Combination of snips from friendly-snippets and vim-snippets repos + +snippet h1 Heading level 1 + # ${0} + +snippet h2 Heading level 2 + ## ${0} + +snippet h3 Heading level 3 + ### ${0} + +snippet h4 Heading level 4 + #### ${0} + +snippet h5 Heading level 5 + ##### ${0} + +snippet h6 Heading level 6 + ##### ${0} + +snippet ] Link + [${1:text}](${2:link}) + +snippet ]h Weblink + [${1:text}](https://${2:address}) + +snippet ]c Link filled with clipboard contents + [${1:text}](${2:`@+`}) + +snippet ]: Link reference style + [${1:id}]: ${2:text} + +snippet ]] Footnote + [^${1:id}]${0} + + [^${1:id}]: ${2:text} + +snippet img Image link + ![${1:alt}](${2:link}) + +snippet imgc Image link with clipboard content + ![${1:alt}](${2:`@+`}) + +snippet ** Bold + **$0** +snippet __ Bold + __$0__ +snippet --- Frontmatter + --- + $0 + --- + +# codeblocks +snippet `` Codeblock with language + \`\`\`${1:language} + ${2:code} + \`\`\` + +# table +snippet tb Simple table + | ${5:factors} | ${1:a} | ${2:b} | + | ------------- |------------- | ------- | + | ${3:f1} | ${0} | N | + | ${4:f2} | N | N | + +# tasklists +snippet tl Tasklist item + - [ ] ${0:item} + +snippet tl3 Tasklist item + - [ ] ${1:item} + - [ ] ${2:item} + - [ ] ${0:item} + +# super/subscript - pandoc/extended markdown only +snippet sub Subscript + ~${0}~ +snippet sup Superscript + ^${0}^ diff --git a/nvim/.config/nvim/snippets/quarto.snippets b/nvim/.config/nvim/snippets/quarto.snippets new file mode 100644 index 0000000..47e9533 --- /dev/null +++ b/nvim/.config/nvim/snippets/quarto.snippets @@ -0,0 +1,100 @@ +# Quarto extensions to markdown + +extends markdown + +# definitions list +snippet : Definition list + $1 + : $0 + +snippet `` Codecell with language + \`\`\`{${1:language}} + ${2:code} + \`\`\` + +snippet ``p Codecell with language + \`\`\`{python} + ${2:code} + \`\`\` + +snippet ``r Codecell with language + \`\`\`{r} + ${2:code} + \`\`\` + +snippet pyfig2 Sub-Figures from python codecell + \`\`\`{python} + #| label: fig-${1:label} + #| fig-cap: "${2:caption}" + #| fig-subcap: + #| - "${3:subcap1}" + #| - "${3:subcap2}" + #| layout-ncol: 2 + + ${0:code} + \`\`\` + +snippet pyfig Figure from python codecell + \`\`\`{python} + #| label: fig-${1:label} + #| fig-cap: "${2:caption}" + + ${0:code} + \`\`\` + +snippet fig General figure + ![${1:caption}](${3:figure}){#fig-${2:label}} + +snippet pytab Figure from python codecell + \`\`\`{python} + #| label: tbl-${1:label} + #| tbl-cap: "${2:caption}" + + ${0:code} + \`\`\` + +snippet fref Figure crossref + @fig-${1:label} +snippet tref Table crossref + @tbl-${1:label} +snippet sref Section crossref + @sec-${1:label} +snippet eref Equation crossref + @eq-${1:label} + +snippet cite Citation + [@${1:bib-key}] + +snippet fn Footnote + [^${1:id}] + + [^${1}]: ${2:text} + +snippet shortcode Shortcode + {{< $0 >}} + +snippet div Div block + ::: {.${1:class}} + $0 + ::: + +snippet note Callout note + ::: {.callout-note} + $0 + ::: +snippet warn Callout warning + ::: {.callout-warning} + $0 + ::: +snippet import Callout important + ::: {.callout-important} + $0 + ::: +snippet tip Callout tip + ::: {.callout-tip} + $0 + ::: +snippet caut Callout caution + ::: {.callout-caution} + $0 + :::