Skip to content

Instantly share code, notes, and snippets.

@joshnuss
Created September 20, 2025 04:06
Show Gist options
  • Select an option

  • Save joshnuss/ad430f73563d69d9b4fa63a47ce69b3a to your computer and use it in GitHub Desktop.

Select an option

Save joshnuss/ad430f73563d69d9b4fa63a47ce69b3a to your computer and use it in GitHub Desktop.
Custom Neovim workflows using vim.ui
-- insert a default snippet when file is first opened
local luasnip = require('luasnip')
local collection = require('luasnip.session.snippet_collection')
local util = require('luasnip.util.util')
local default_snippets = {
{ pattern = "/[+]page.svelte$", snippet = "page" },
{ pattern = "/[+]page.js$", snippet = "page" },
{ pattern = "/[+]page.ts$", snippet = "page" },
{ pattern = "/[+]page.server.js$", snippet = "page.server" },
{ pattern = "/[+]page.server.ts$", snippet = "page.server" },
{ pattern = "/[+]layout.svelte$", snippet = "layout" },
{ pattern = "/[+]layout.js$", snippet = "layout" },
{ pattern = "/[+]layout.ts$", snippet = "layout" },
{ pattern = "/[+]layout.server.js$", snippet = "layout.server" },
{ pattern = "/[+]layout.server.ts$", snippet = "layout.server" },
{ pattern = ".*.svelte$", snippet = "component" },
}
local function find_default_snippet(path)
for _index, record in ipairs(default_snippets) do
if string.match(path, record.pattern) then
return collection.match_snippet(record.snippet, util.get_snippet_filetypes(), "snippets")
end
end
end
local function confirm_default_snippet(snippet)
vim.ui.input({ prompt = "Use default template? ", default = "Y" }, function(choice)
if choice:lower() ~= 'y' then
return
end
luasnip.snip_expand(snippet, {})
end)
end
local function maybe_insert_snippet(ev)
local snippet = find_default_snippet(ev.file)
if not snippet then
return
end
confirm_default_snippet(snippet)
end
vim.api.nvim_create_augroup('insert_default_snippet', { clear = true })
vim.api.nvim_create_autocmd('BufNewFile', {
group = 'insert_default_snippet',
callback = maybe_insert_snippet
})
-- prompt for new SvelteKit route
local function create_route()
-- prompt for path
vim.ui.input({ prompt = 'New Route: ' }, function(path)
-- create directory
os.execute("mkdir -p src/routes/" .. path)
-- open file
vim.cmd('edit src/routes/' .. path .. '/+page.svelte')
end)
end
-- setup key binding: Comma+C
vim.keymap.set('n', '<leader>c', create_route)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment