From 6491093ae38166e1427aeac799a7ab5b6b036e60 Mon Sep 17 00:00:00 2001 From: Felix Nehrke Date: Tue, 26 Aug 2025 03:39:00 +0200 Subject: [PATCH] Automatically apply skeleton snippets to certain filetypes if configured --- .config/nvim/lua/config/defaults.lua | 10 ++++++++++ .config/nvim/lua/plugins/luasnip.lua | 27 ++++++++++++++++++++++++++ .config/nvim/snippets/vimwiki.snippets | 14 +++++++++++++ .config/nvim/snippets/vue.snippets | 6 +++--- 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 .config/nvim/snippets/vimwiki.snippets diff --git a/.config/nvim/lua/config/defaults.lua b/.config/nvim/lua/config/defaults.lua index 0353747..993d74e 100644 --- a/.config/nvim/lua/config/defaults.lua +++ b/.config/nvim/lua/config/defaults.lua @@ -126,3 +126,13 @@ vim.api.nvim_create_autocmd("FileType", { vim.opt_local.foldmethod = "marker" end, }) +-- snippets +vim.api.nvim_create_autocmd("FileType", { + pattern = "snippets", + group = configgroup, + callback = function() + vim.opt_local.expandtab = false + vim.opt_local.shiftwidth = 2 + vim.opt_local.tabstop = 4 + end, +}) diff --git a/.config/nvim/lua/plugins/luasnip.lua b/.config/nvim/lua/plugins/luasnip.lua index 0117a2f..7d06e87 100644 --- a/.config/nvim/lua/plugins/luasnip.lua +++ b/.config/nvim/lua/plugins/luasnip.lua @@ -1,3 +1,30 @@ +-- idea stolen from: https://vi.stackexchange.com/a/42370 +local skelconfig = vim.api.nvim_create_augroup('SKEL_CONFIG', { clear = true }) +vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, { + group = skelconfig, + callback = function() + -- another autocmd so it doesn't conflict + -- with other plugins that like to insert text on file open + vim.api.nvim_create_autocmd("VimEnter", { + group = skelconfig, + callback = function() + -- stop if buffer is not empty! + if vim.fn.line("$") ~= 1 or vim.fn.getline(1) ~= "" then + return + end + local ls = require('luasnip') + local snippets = ls.get_snippets(vim.bo.ft) + for _, snippet in ipairs(snippets) do + if snippet["name"] == "_skeleton" then + ls.snip_expand(snippet) + return true + end + end + end + }) + end, +}) + return { "L3MON4D3/LuaSnip", version = "v2.*", -- just because the docs mention it diff --git a/.config/nvim/snippets/vimwiki.snippets b/.config/nvim/snippets/vimwiki.snippets new file mode 100644 index 0000000..c803157 --- /dev/null +++ b/.config/nvim/snippets/vimwiki.snippets @@ -0,0 +1,14 @@ +snippet _skeleton Create initial diary entry + = `strftime("%-d. %b")`: ${1:summary} = + %% `strftime("%Y-%m-%d")` + + ${0} + +snippet xdia Create initial diary entry + = `strftime("%-d. %b")`: ${1:summary} (xdia) = + %% `strftime("%Y-%m-%d")` + + ${0} + +snippet xtodo Create a new todo + * [ ] ${0} diff --git a/.config/nvim/snippets/vue.snippets b/.config/nvim/snippets/vue.snippets index 4aee951..68733b0 100644 --- a/.config/nvim/snippets/vue.snippets +++ b/.config/nvim/snippets/vue.snippets @@ -1,10 +1,10 @@ -snippet xscript Create initial skeleton +snippet _skeleton Create initial skeleton snippet xpagemeta Add page meta