mirror of
https://codeberg.org/leana8959/.files.git
synced 2025-12-06 14:49:14 +00:00
nvim/cmp: load snippets per filetype
This commit is contained in:
parent
b6522ffbba
commit
14bfbece87
4 changed files with 50 additions and 111 deletions
|
|
@ -1 +1,17 @@
|
||||||
vim.bo.expandtab = false
|
vim.bo.expandtab = false
|
||||||
|
|
||||||
|
do
|
||||||
|
local luasnip = require("luasnip")
|
||||||
|
local s = luasnip.snippet
|
||||||
|
local t = luasnip.text_node
|
||||||
|
local cr = function() return t { "", "" } end
|
||||||
|
local i = luasnip.insert_node
|
||||||
|
|
||||||
|
luasnip.add_snippets("go", {
|
||||||
|
s("ie", {
|
||||||
|
t("if err != nil {"), cr(),
|
||||||
|
t("\t"), i(0), cr(),
|
||||||
|
t("}"),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
|
||||||
|
|
@ -3,3 +3,7 @@ opts.matchit_let_in()
|
||||||
|
|
||||||
vim.bo.shiftwidth = 2
|
vim.bo.shiftwidth = 2
|
||||||
vim.bo.expandtab = true
|
vim.bo.expandtab = true
|
||||||
|
|
||||||
|
local luasnip = require("luasnip")
|
||||||
|
local haskell_snippets = require("haskell-snippets").all
|
||||||
|
luasnip.add_snippets("haskell", haskell_snippets, { key = "haskell" })
|
||||||
|
|
|
||||||
|
|
@ -7,3 +7,30 @@ vim.keymap.set("n", "<leader>f", function()
|
||||||
vim.cmd([[silent exec "%!typstyle -c 100"]])
|
vim.cmd([[silent exec "%!typstyle -c 100"]])
|
||||||
vim.fn.winrestview(saved)
|
vim.fn.winrestview(saved)
|
||||||
end, { desc = "ft(typst): Format with typstyle" })
|
end, { desc = "ft(typst): Format with typstyle" })
|
||||||
|
|
||||||
|
do
|
||||||
|
local luasnip = require("luasnip")
|
||||||
|
local s = luasnip.snippet
|
||||||
|
local t = luasnip.text_node
|
||||||
|
local cr = function() return t { "", "" } end
|
||||||
|
local i = luasnip.insert_node
|
||||||
|
local f = luasnip.function_node
|
||||||
|
|
||||||
|
local function show_date_typst_entry() return os.date('"%Y-%m-%d %H:%M:%S"') end
|
||||||
|
luasnip.add_snippets("typst", {
|
||||||
|
s("entry", {
|
||||||
|
t("#entry("),
|
||||||
|
f(show_date_typst_entry),
|
||||||
|
t { ")[", "" },
|
||||||
|
t(" "),
|
||||||
|
i(0),
|
||||||
|
t { "", "]" },
|
||||||
|
}),
|
||||||
|
s("lang", {
|
||||||
|
t('#set text(lang: "'),
|
||||||
|
i(0),
|
||||||
|
t('")'),
|
||||||
|
cr(),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
|
||||||
|
|
@ -28,132 +28,24 @@ local has_words_before = function()
|
||||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
-----------------
|
|
||||||
-- Lazy loader --
|
|
||||||
-----------------
|
|
||||||
require("luasnip.loaders.from_vscode").lazy_load { paths = { "./snippets" } }
|
|
||||||
|
|
||||||
----------
|
|
||||||
-- Init --
|
|
||||||
----------
|
|
||||||
luasnip.setup { update_events = { "TextChanged", "TextChangedI" } }
|
luasnip.setup { update_events = { "TextChanged", "TextChangedI" } }
|
||||||
|
|
||||||
-----------
|
|
||||||
-- Typst --
|
|
||||||
-----------
|
|
||||||
local function show_date_typst_entry() return os.date('"%Y-%m-%d %H:%M:%S"') end
|
|
||||||
luasnip.add_snippets("typst", {
|
|
||||||
s("entry", {
|
|
||||||
t("#entry("),
|
|
||||||
f(show_date_typst_entry),
|
|
||||||
t { ")[", "" },
|
|
||||||
t(" "),
|
|
||||||
i(0),
|
|
||||||
t { "", "]" },
|
|
||||||
}),
|
|
||||||
s("lang", {
|
|
||||||
t('#set text(lang: "'),
|
|
||||||
i(0),
|
|
||||||
t('")'),
|
|
||||||
cr(),
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
|
|
||||||
local function get_cms()
|
|
||||||
assert(vim.bo.commentstring ~= "", "comment string is not set")
|
|
||||||
local left = vim.bo.commentstring:gsub("%s*%%s.*", "")
|
|
||||||
local right = vim.bo.commentstring:gsub(".*%%s%s*", "")
|
|
||||||
if right == "" then
|
|
||||||
right = left
|
|
||||||
end
|
|
||||||
return { left = left, right = right }
|
|
||||||
end
|
|
||||||
local function horizon(args)
|
|
||||||
local cms = get_cms()
|
|
||||||
local chr = cms.left:sub(-1)
|
|
||||||
local len = vim.fn.strdisplaywidth(args[1][1])
|
|
||||||
|
|
||||||
local acc = cms.left
|
|
||||||
for _ = cms.left:len(), len + cms.right:len() + 1, 1 do
|
|
||||||
acc = acc .. chr
|
|
||||||
end
|
|
||||||
acc = acc .. cms.right
|
|
||||||
|
|
||||||
return acc
|
|
||||||
end
|
|
||||||
local function left()
|
|
||||||
local cms = get_cms()
|
|
||||||
return cms.left .. " "
|
|
||||||
end
|
|
||||||
local function right()
|
|
||||||
local cms = get_cms()
|
|
||||||
return " " .. cms.right
|
|
||||||
end
|
|
||||||
|
|
||||||
-- stylua: ignore start
|
|
||||||
luasnip.add_snippets("all", {
|
|
||||||
s("banner", {
|
|
||||||
f(horizon, { 1 }), cr(),
|
|
||||||
f(left), i(1), f(right), cr(),
|
|
||||||
f(horizon, { 1 }),
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
-- stylua: ignore end
|
|
||||||
|
|
||||||
-------------
|
|
||||||
-- Haskell --
|
|
||||||
-------------
|
|
||||||
local haskell_snippets = require("haskell-snippets").all
|
|
||||||
luasnip.add_snippets("haskell", haskell_snippets, { key = "haskell" })
|
|
||||||
|
|
||||||
------------
|
|
||||||
-- Golang --
|
|
||||||
------------
|
|
||||||
-- stylua: ignore start
|
|
||||||
luasnip.add_snippets("go", {
|
|
||||||
s("ie", {
|
|
||||||
t("if err != nil {"), cr(),
|
|
||||||
t("\t"), i(0), cr(),
|
|
||||||
t("}"),
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
-- stylua: ignore end
|
|
||||||
|
|
||||||
---------------
|
|
||||||
-- Setup CMP --
|
|
||||||
---------------
|
|
||||||
local of_filetype = function(fts)
|
|
||||||
local ft = vim.bo.filetype
|
|
||||||
for _, v in ipairs(fts) do
|
|
||||||
if v == ft then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
cmp.setup {
|
cmp.setup {
|
||||||
snippet = {
|
snippet = {
|
||||||
expand = function(args) luasnip.lsp_expand(args.body) end,
|
expand = function(args) luasnip.lsp_expand(args.body) end,
|
||||||
},
|
},
|
||||||
mapping = cmp.mapping.preset.insert(),
|
mapping = cmp.mapping.preset.insert(),
|
||||||
|
-- TODO: how can I make some take precedence of others?
|
||||||
sources = {
|
sources = {
|
||||||
{ name = "luasnip" },
|
{ name = "luasnip" },
|
||||||
{ name = "nvim_lsp" },
|
{ name = "nvim_lsp" },
|
||||||
{ name = "path" },
|
{ name = "path" },
|
||||||
{
|
{ name = "buffer" },
|
||||||
name = "buffer",
|
|
||||||
keyword_length = 10,
|
|
||||||
option = {
|
|
||||||
enable_in_context = function() return of_filetype { "tex", "markdown", "typst" } end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name = "spell",
|
name = "spell",
|
||||||
keyword_length = 10,
|
keyword_length = 10, -- PERF:
|
||||||
option = {
|
option = {
|
||||||
keep_all_entries = true,
|
keep_all_entries = true,
|
||||||
enable_in_context = function() return of_filetype { "tex", "markdown", "typst" } end,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue