diff --git a/lua/config.lua b/lua/config.lua index 2afc318..04c281f 100644 --- a/lua/config.lua +++ b/lua/config.lua @@ -85,6 +85,16 @@ return { -- Decrement incremental selection (visual) decrement_selection = "" } + }, + + nvim_cmp = { + -- Enable nvim-cmp + enabled = true + }, + + luasnip = { + -- Enable luasnip + enabled = true } } } diff --git a/lua/core/plugins/luasnip.lua b/lua/core/plugins/luasnip.lua new file mode 100644 index 0000000..7106761 --- /dev/null +++ b/lua/core/plugins/luasnip.lua @@ -0,0 +1,13 @@ +return { + "L3MON4D3/LuaSnip", + + dependencies = { + "rafamadriz/friendly-snippets" + }, + + config = function() + local luasnip = require("luasnip.loaders.from_vscode") + + luasnip.lazy_load() + end +} diff --git a/lua/core/plugins/nvim_cmp.lua b/lua/core/plugins/nvim_cmp.lua new file mode 100644 index 0000000..ff6a958 --- /dev/null +++ b/lua/core/plugins/nvim_cmp.lua @@ -0,0 +1,75 @@ +return { + "hrsh7th/nvim-cmp", + + dependencies = { + { + "L3MON4D3/LuaSnip", + "saadparwaiz1/cmp_luasnip", + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-cmdline", + "onsails/lspkind.nvim" + } + }, + + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + local lspking = require("lspkind") + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end + }, + + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = true }), + }), + + sources = cmp.config.sources( + { + { name = "nvim_lsp" }, + { name = "luasnip" } + }, + { + { name = "buffer" }, + { name = "path" } + } + ), + + formatting = { + format = lspking.cmp_format({ + mode = "symbol_text", + maxwidth = 50, + ellipsis_char = "..." + }) + } + }) + + cmp.setup.cmdline("/", { + mapping = cmp.mapping.preset.cmdline(), + sources = { + { name = "buffer" } + } + }) + + cmp.setup.cmdline(":", { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources( + { + { name = "path" } + }, + { + { name = "cmdline" } + } + ) + }) + end +}