diff --git a/init.lua b/init.lua index c89e425..7be3e38 100644 --- a/init.lua +++ b/init.lua @@ -1,2 +1,4 @@ require ("vanilla") require ("plugin") +require ("snippets") +require ("completion") diff --git a/lua/completion.lua b/lua/completion.lua new file mode 100644 index 0000000..b254a32 --- /dev/null +++ b/lua/completion.lua @@ -0,0 +1,121 @@ +vim.opt.completeopt = { "menu", "menuone", "popup" } + +local cmp = require("cmp") + +cmp.setup({ + -- snippet setup configuration + snippet = { + expand = function(args) + vim.fn["UltiSnips#Anon"](args.body) + end, + }, + + -- Window/Menu + view = { + entries = "custom" + }, + + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + + -- Add ghost text because it's fancy + experimental = { + ghost_text = {}, + }, + + -- mapping + mapping = cmp.mapping.preset.insert({ + -- Shift+TAB to go to the Previous Suggested item + [""] = cmp.mapping.select_prev_item(), + -- Tab to go to the next suggestion + [""] = cmp.mapping.select_next_item(), + -- CTRL+SHIFT+f to scroll backwards in description + [""] = cmp.mapping.scroll_docs(-4), + -- CTRL+F to scroll forwards in the description + [""] = cmp.mapping.scroll_docs(4), + -- CTRL+SPACE to bring up completion at current Cursor location + [""] = cmp.mapping.complete(), + -- CTRL+e to exit suggestion and close it + [""] = cmp.mapping.close(), -- TODO: Search better option + -- CR (enter or return) to CONFIRM the currently selection suggestion + -- We set the ConfirmBehavior to insert the Selected suggestion + [""] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Insert, + select = true, + }), + }), + + -- sources + sources = cmp.config.sources({ + { name = "path" }, + { name = "ultisnips", keyword_length = 1 }, + { name = "calc" }, + { name = "lua-latex-symbols", option = { cache = true } }, + { name = "buffer", keyword_length = 3 }, + { name = "nvim_lsp", keyword_length = 2}, + }), + + -- formatting + formatting = { + fields = { "menu", "abbr", "kind" }, + format = function (entry, item) + local menu_icon = { + path = "𝦶", + ultisnips = "✂", + calc = "Σ", + lualatexsymbols = "󰿈", + buffer = "󰘝", + nvim_lsp = "⌨" + } + item.menu = menu_icon[entry.source.name] + return item + end, + }, +}) + +cmp.setup.cmdline({ "/", "?" }, { + mapping = cmp.mapping.preset.cmdline(), + sources = { + { name = "buffer" }, + { name = "fuzzy_path", keyword_length = 4 }, + }, + formatting = { + fields = { "menu", "abbr", "kind" }, + format = function(entry, item) + local menu_icon = { + buffer = "󰱼", + fuzzy_path = "", + } + item.menu = menu_icon[entry.source.name] + return item + end, + }, +}) + +-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). +cmp.setup.cmdline(":", { + view = { + entries = { name = 'wildmenu', separator = "|" } + }, + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = "path" }, + { name = "cmdline_history", keyword_length = 24 }, + }, { + { name = "cmdline", keyword_length = 1 }, + }), + formatting = { + fields = { "menu", "abbr", "kind" }, + format = function(entry, item) + local menu_icon = { + path = "󰙅", + cmdline = "", + cmdline_history = "󰂺 ", + } + item.menu = menu_icon[entry.source.name] + return item + end, + }, +}) diff --git a/lua/plugin.lua b/lua/plugin.lua index f8e725e..39d9306 100644 --- a/lua/plugin.lua +++ b/lua/plugin.lua @@ -1,4 +1,31 @@ require "paq" { 'savq/paq-nvim', - 'mhartington/formatter.nvim' + + -- Optics + 'vim-airline/vim-airline', + 'vim-airline/vim-airline-themes', + 'ryanoasis/vim-devicons', + 'mhinz/vim-startify', + + -- Mason related stuff + -- Language server protocol + 'neovim/nvim-lspconfig', + -- Formatter + 'mhartington/formatter.nvim', + + -- Editing + 'cohama/lexima.vim', + 'tpope/vim-surround', + 'SirVer/UltiSnips', + + -- Behavior + 'dstein64/vim-startuptime', + + -- Completions + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'hrsh7th/cmp-cmdline', + 'hrsh7th/nvim-cmp', + 'quangnguyen30192/cmp-nvim-ultisnips' }