local ls = require("luasnip") local s = ls.snippet local sn = ls.snippet_node local isn = ls.indent_snippet_node local t = ls.text_node local i = ls.insert_node local f = ls.function_node local c = ls.choice_node local d = ls.dynamic_node local r = ls.restore_node local events = require("luasnip.util.events") local ai = require("luasnip.nodes.absolute_indexer") local extras = require("luasnip.extras") local l = extras.lambda local rep = extras.rep local p = extras.partial local m = extras.match local n = extras.nonempty local dl = extras.dynamic_lambda local fmt = require("luasnip.extras.fmt").fmt local fmta = require("luasnip.extras.fmt").fmta local conds = require("luasnip.extras.expand_conditions") local postfix = require("luasnip.extras.postfix").postfix local types = require("luasnip.util.types") local parse = require("luasnip.util.parser").parse_snippet local ms = ls.multi_snippet local k = require("luasnip.nodes.key_indexer").new_key local line_begin = require("luasnip.extras.expand_conditions").line_begin ls.add_snippets("markdown", { s("date", { t("# "), f(function() return os.date("%y-%m-%d") end, {}), t({ "", "- " }), }), -- s({ -- trig = [[\v(https?://(?:www\.)?([-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_\+.~#?&//=]*))]], -- regTrig = true, -- wordTrig = false, -- }, -- fmt("[{}]({})", { -- f(function(_, snip) return snip.captures[2] end), -- f(function(_, snip) return snip.captures[1] end), -- }) -- ), s({ trig = [[%f[%S](https?://([^/%s]+)[^%s]*)]], regTrig = true, wordTrig = false, }, fmt("[{}]({})", { -- link text → host f(function(_, snip) return snip.captures[2] end), -- link target → full url f(function(_, snip) return snip.captures[1] end), })) }) -- local ls = require('luasnip') -- local fmt = require('luasnip.extras.fmt').fmt -- local fmta = require('luasnip.extras.fmt').fmta -- local rep = require('luasnip.extras').rep -- local dl = require('luasnip.extras').dynamic_lambda -- local l = require('luasnip.extras').lambda -- local autosnippet = ls.extend_decorator.apply(s, { snippetType = 'autosnippet' }) -- -- some shorthands... -- local s = ls.snippet -- local n = ls.snippet_node -- local t = ls.text_node -- local i = ls.insert_node -- local f = ls.function_node -- local c = ls.choice_node -- local d = ls.dynamic_node -- ls.config.set_config({ -- history = true, -- -- treesitter-hl has 100, use something higher (default is 200). -- ext_base_prio = 200, -- -- minimal increase in priority. -- ext_prio_increase = 1, -- enable_autosnippets = true, -- store_selection_keys = '', -- }) -- vim.keymap.set({ 'i', 's' }, '', function() -- if ls.choice_active() then ls.change_choice(1) end -- end) -- vim.keymap.set({ 'i', 's' }, '', function() -- if ls.choice_active() then ls.change_choice(-1) end -- end) -- local function get_line_iter(str) -- if str:sub(-1) ~= '\n' then str = str .. '\n' end -- return str:gmatch('(.-)\n') -- end -- local function box_trim_lines(str) -- local new_str = '' -- for line in get_line_iter(str) do -- line = line:gsub('^%s+', '') -- line = string.gsub(line, '%s+$', '') -- new_str = new_str .. '\n' .. line -- end -- return new_str -- end -- -- local return_filename = function() -- -- return vim.fn.fnamemodify(vim.fn.expand('%'), ':p') -- -- end -- local return_filename = function() -- -- return vim.fn.fnamemodify(vim.fn.expand('%'), ':p') -- local filename = vim.fn.fnamemodify(vim.fn.expand('%'), ':p') -- local home_dir = vim.fn.expand('~') -- if filename:sub(1, #home_dir) == home_dir then filename = '~/' .. filename:sub(#home_dir + 2) end -- return filename -- end -- local date = function() return { os.date('%Y-%m-%d') } end -- local fulldate = function() return { os.date('%a, %b %Y/%m/%d - %H:%M:%S') } end -- -- lua print(os.date("%a, %b %Y/%m/%d - %H:%M:%S")) -- local get_visual = function(args, parent) -- if #parent.snippet.env.SELECT_RAW > 0 then -- return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) -- else -- If SELECT_RAW is empty, return a blank insert node -- return sn(nil, i(1)) -- end -- end -- local filename = function() return { vim.fn.expand('%:p') } end -- local clipboard = function() return { vim.fn.getreg('+') } end -- -- Make sure to not pass an invalid command, as io.popen() may write over nvim-text. -- local function bash(_, _, command) -- local file = io.popen(command, 'r') -- local res = {} -- for line in file:lines() do -- table.insert(res, line) -- end -- return res -- end -- local function get_port_snip(args) -- if #args < 1 and not args[1][1] then return n(nil, t('hello world')) end -- local type = args[1][1] -- local indent = ' ' -- if type == 'NodePort' or type == 'LoadBalancer' then -- return n( -- nil, -- fmt( -- box_trim_lines([[ -- - port: {} -- {}targetPort: {} -- {}nodePort: {} -- ]]), -- { -- i(1, '30000'), -- indent, -- i(2, '80'), -- indent, -- i(3, '30000'), -- } -- ) -- ) -- end -- if type == 'ClusterIP' then -- return n( -- nil, -- fmt( -- [[ -- - port: {} -- {}targetPort: {} -- ]], -- { -- i(1, '30000'), -- indent, -- i(2, '80'), -- } -- ) -- ) -- end -- end -- ls.add_snippets(nil, { -- markdown = { -- s({ -- trig = 'link', -- namr = 'markdown_link [selection]', -- dscr = 'Create markdown link [txt](url) Select description + TAB', -- }, { -- t('['), -- i(1), -- t(']('), -- d(2, get_visual), -- t(')'), -- i(0), -- }), -- s({ -- trig = 't', -- namr = 'check list', -- desc = 'Create item of a checklist', -- }, fmt('- [{}] {}', { c(2, { t(' '), t('-'), t('') }), i(1, 'task') })), -- autosnippet( -- { -- trig = 'qw', -- name = 'trig', -- dscr = 'inline code', -- }, -- fmt( -- [[ -- `<>` <> -- ]], -- { d(1, get_visual), i(0) }, -- { delimiters = '<>' } -- ) -- ), -- s({ -- trig = 'code', -- namr = 'markdown_code_fenced', -- desc = 'code backsticks', -- priority = 2000, -- }, { -- t('```'), -- i(1, 'Lang'), -- t({ '', '' }), -- d(2, get_visual), -- t({ '', '```', '' }), -- i(0), -- }), -- s({ -- trig = 'meta', -- namr = 'Metadata', -- dscr = 'Yaml metadata format for markdown', -- }, { -- t({ '---', 'title: ' }), -- i(1, 'note_title'), -- t({ '', 'author: ' }), -- i(2, 'author'), -- t({ '', 'date: ' }), -- f(date, {}), -- t({ '', 'cathegories: [' }), -- i(3, ''), -- t({ ']', 'lastmod: ' }), -- f(date, {}), -- t({ '', 'tags: [' }), -- i(4), -- t({ ']', 'comments: true', '---', '' }), -- i(0), -- }), -- s({ -- trig = '_skel', -- namr = 'File_skeleton', -- dscr = 'File header (dynamic)', -- }, { -- t({ '---', 'File: ' }), -- f(return_filename, {}), -- t({ '', 'Last Change: ' }), -- f(fulldate, {}), -- t({ '', 'tags: [' }), -- i(1), -- t({ ']', '---', '' }), -- i(0), -- }), -- }, -- })