summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVito G. Graffagnino <vito@graffagnino.xyz>2022-06-03 13:57:52 +0100
committerVito G. Graffagnino <vito@graffagnino.xyz>2022-06-03 13:57:52 +0100
commit2dbc3b33e5db4f07667aef9e03ffa2626d95f3ba (patch)
treea88af1548ec190d4372c4364cb57eb6cd2138f4c
parentfe68ddcece93b65052894e8d0a5417f8eab4d1cc (diff)
parent2e04047bc61be798177a9fffc21d1ed025133ac1 (diff)
Merge branch '05-completion' into vgg
-rw-r--r--init.lua1
-rw-r--r--lua/user/cmp.lua127
-rw-r--r--lua/user/plugins.lua11
3 files changed, 139 insertions, 0 deletions
diff --git a/init.lua b/init.lua
index be25513..6614b7a 100644
--- a/init.lua
+++ b/init.lua
@@ -2,3 +2,4 @@ require "user.options"
require "user.keymaps"
require "user.plugins"
require "user.colorscheme"
+require "user.cmp"
diff --git a/lua/user/cmp.lua b/lua/user/cmp.lua
new file mode 100644
index 0000000..c5e2d3e
--- /dev/null
+++ b/lua/user/cmp.lua
@@ -0,0 +1,127 @@
+local cmp_status_ok, cmp = pcall(require, "cmp")
+if not cmp_status_ok then
+ return
+end
+
+local snip_status_ok, luasnip = pcall(require, "luasnip")
+if not snip_status_ok then
+ return
+end
+
+require("luasnip/loaders/from_vscode").lazy_load()
+
+local check_backspace = function()
+ local col = vim.fn.col "." - 1
+ return col == 0 or vim.fn.getline("."):sub(col, col):match "%s"
+end
+
+--   פּ ﯟ   some other good icons
+local kind_icons = {
+ Text = "",
+ Method = "m",
+ Function = "",
+ Constructor = "",
+ Field = "",
+ Variable = "",
+ Class = "",
+ Interface = "",
+ Module = "",
+ Property = "",
+ Unit = "",
+ Value = "",
+ Enum = "",
+ Keyword = "",
+ Snippet = "",
+ Color = "",
+ File = "",
+ Reference = "",
+ Folder = "",
+ EnumMember = "",
+ Constant = "",
+ Struct = "",
+ Event = "",
+ Operator = "",
+ TypeParameter = "",
+}
+-- find more here: https://www.nerdfonts.com/cheat-sheet
+
+cmp.setup {
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body) -- For `luasnip` users.
+ end,
+ },
+ mapping = {
+ ["<C-k>"] = cmp.mapping.select_prev_item(),
+ ["<C-j>"] = cmp.mapping.select_next_item(),
+ ["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
+ ["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
+ ["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
+ ["<C-y>"] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
+ ["<C-e>"] = cmp.mapping {
+ i = cmp.mapping.abort(),
+ c = cmp.mapping.close(),
+ },
+ -- Accept currently selected item. If none selected, `select` first item.
+ -- Set `select` to `false` to only confirm explicitly selected items.
+ ["<CR>"] = cmp.mapping.confirm { select = true },
+ ["<Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.expandable() then
+ luasnip.expand()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ elseif check_backspace() then
+ fallback()
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ ["<S-Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item()
+ elseif luasnip.jumpable(-1) then
+ luasnip.jump(-1)
+ else
+ fallback()
+ end
+ end, {
+ "i",
+ "s",
+ }),
+ },
+ formatting = {
+ fields = { "kind", "abbr", "menu" },
+ format = function(entry, vim_item)
+ -- Kind icons
+ vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
+ -- vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind
+ vim_item.menu = ({
+ luasnip = "[Snippet]",
+ buffer = "[Buffer]",
+ path = "[Path]",
+ })[entry.source.name]
+ return vim_item
+ end,
+ },
+ sources = {
+ { name = "luasnip" },
+ { name = "buffer" },
+ { name = "path" },
+ },
+ confirm_opts = {
+ behavior = cmp.ConfirmBehavior.Replace,
+ select = false,
+ },
+ documentation = {
+ border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" },
+ },
+ experimental = {
+ ghost_text = false,
+ native_menu = false,
+ },
+}
diff --git a/lua/user/plugins.lua b/lua/user/plugins.lua
index d6176a1..37d3019 100644
--- a/lua/user/plugins.lua
+++ b/lua/user/plugins.lua
@@ -51,6 +51,17 @@ return packer.startup(function(use)
use 'tiagovla/tokyodark.nvim'
+ -- cmp plugins
+ use "hrsh7th/nvim-cmp" -- The completion plugin
+ use "hrsh7th/cmp-buffer" -- buffer completions
+ use "hrsh7th/cmp-path" -- path completions
+ use "hrsh7th/cmp-cmdline" -- cmdline completions
+ use "saadparwaiz1/cmp_luasnip" -- snippet completions
+
+ -- snippets
+ use "L3MON4D3/LuaSnip" --snippet engine
+ use "rafamadriz/friendly-snippets" -- a bunch of snippets to use
+
-- Automatically set up your configuration after cloning packer.nvim
-- Put this at the end after all plugins
if PACKER_BOOTSTRAP then