aboutsummaryrefslogtreecommitdiff
path: root/lua/plugins/cmp.lua
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2025-09-24 00:14:04 +0200
committersrdusr <trevorgray@srdusr.com>2025-09-24 00:14:04 +0200
commit966d12ac730c83da90d60ab24eae539b2ea69441 (patch)
tree702f5f832796b572d0faee31c0eb15507e91f49a /lua/plugins/cmp.lua
parent2a8020a2e9b7ef2ee77ddee14892127a4eb95187 (diff)
downloaddotfiles-966d12ac730c83da90d60ab24eae539b2ea69441.tar.gz
dotfiles-966d12ac730c83da90d60ab24eae539b2ea69441.zip
Update/Overhaul
Diffstat (limited to 'lua/plugins/cmp.lua')
-rwxr-xr-x[-rw-r--r--]lua/plugins/cmp.lua397
1 files changed, 55 insertions, 342 deletions
diff --git a/lua/plugins/cmp.lua b/lua/plugins/cmp.lua
index fe212fc..7de04ad 100644..100755
--- a/lua/plugins/cmp.lua
+++ b/lua/plugins/cmp.lua
@@ -1,354 +1,67 @@
--- Setup nvim-cmp.
-vim.opt.completeopt = "menu,menuone,noselect"
---vim.g.completeopt = "menu,menuone,noselect,noinsert"
-local cmp_status_ok, cmp = pcall(require, "cmp")
-if not cmp_status_ok then
- return
-end
---local WIDE_HEIGHT = 40
-
-local opts = {
- -- whether to highlight the currently hovered symbol
- -- disable if your cpu usage is higher than you want it
- -- or you just hate the highlight
- -- default: true
- highlight_hovered_item = true,
- show_guides = true,
-}
-require("symbols-outline").setup(opts)
-
---local snippets_paths = function()
--- local plugins = { "friendly-snippets" }
--- local paths = {}
--- local path
--- local root_path = vim.env.HOME .. "/.vim/plugged/"
--- for _, plug in ipairs(plugins) do
--- path = root_path .. plug
--- if vim.fn.isdirectory(path) ~= 0 then
--- table.insert(paths, path)
--- end
--- end
--- return paths
---end
---
---require("luasnip.loaders.from_vscode").lazy_load({
--- paths = snippets_paths(),
--- include = nil, -- Load all languages
--- exclude = {},
---})
+local M = {}
---require("luasnip.loaders.from_vscode").lazy_load()
-local lspkind = require("lspkind")
-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 = "",
-}
-cmp.setup({
+--- Setup and configure nvim-cmp
+-- This function initializes and configures the completion plugin
+-- @return boolean True if setup was successful, false otherwise
+function M.setup()
+ -- Check Neovim version
+ local nvim_version = vim.version()
+ if nvim_version.major == 0 and nvim_version.minor < 5 then
+ return false
+ end
+
+ -- Try to load required modules
+ local cmp = pcall(require, 'cmp') and require('cmp')
+ if not cmp then
+ return false
+ end
+
+ local luasnip_ok, luasnip = pcall(require, 'luasnip')
+ if not luasnip_ok then
+ vim.notify("luasnip not found, some features may be limited", vim.log.levels.WARN)
+ end
+
+ -- Setup nvim-cmp
+ cmp.setup({
snippet = {
- --expand = function(args)
- -- require("luasnip").lsp_expand(args.body)
- --end,
expand = function(args)
- local luasnip = require("luasnip")
- if not luasnip then
- return
- end
- luasnip.lsp_expand(args.body)
+ if luasnip_ok then luasnip.lsp_expand(args.body) end
end,
},
mapping = cmp.mapping.preset.insert({
- -- ["<CR>"] = cmp.mapping.confirm({
- -- behavior = cmp.ConfirmBehavior.Replace,
- -- select = true,
- -- }),
- --["<C-k>"] = cmp.mapping(cmp.mapping.select_prev_item(), { 'i', 'c' }),
- --["<C-j>"] = cmp.mapping(cmp.mapping.select_next_item(), { 'i', 'c' }),
- ["<C-y>"] = cmp.mapping.confirm({ select = true }),
- --["<C-e>"] = cmp.mapping.close(),
- --['<C-e>'] = cmp.mapping({
- -- i = cmp.mapping.abort(),
- -- c = cmp.mapping.close(),
- --}),
- ["<C-e>"] = cmp.mapping({
- i = function()
- if cmp.visible() then
- cmp.abort()
- require("user.mods").toggle_completion()
- require("notify")("completion off")
- else
- cmp.complete()
- require("user.mods").toggle_completion()
- require("notify")("completion on")
- end
- end,
- }),
- --["<CR>"] = cmp.mapping({
- -- i = function(fallback)
- -- if cmp.visible() then
- -- cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false })
- -- require("user.mods").toggle_completion()
- -- else
- -- fallback()
- -- end
- -- end,
- --}),
-
- -- ["<C-e>"] = cmp.mapping({
- -- i = function()
- -- if cmp.visible() then
- -- require("notify")("visible")
- -- cmp.abort()
- -- else
- -- require("notify")("not visible")
- -- cmp.complete()
- -- end
- -- end,
- -- c = function()
- -- if cmp.visible() then
- -- require("notify")("visible")
- -- cmp.close()
- -- else
- -- require("notify")("not visible")
- -- cmp.complete()
- -- end
- -- end,
- -- }),
- --['<CR>'] = cmp.config.disable,
- ["<C-u>"] = cmp.mapping.scroll_docs(-4),
- ["<C-d>"] = cmp.mapping.scroll_docs(4),
- ["<C-Space>"] = cmp.mapping.complete(),
- --['<C-o>'] = function(fallback)
- -- if cmp.visible() then
- -- cmp.mapping.confirm({ select = true })(fallback)
- -- else
- -- cmp.mapping.complete()(fallback)
- -- end
- --end
+ ['<C-Space>'] = cmp.mapping.complete(),
+ ['<CR>'] = cmp.mapping.confirm({ select = true }),
+ ['<Tab>'] = cmp.mapping.select_next_item(),
+ ['<S-Tab>'] = cmp.mapping.select_prev_item(),
}),
-
sources = cmp.config.sources({
- --{ name = "nvim_lua" },
- { name = "luasnip" },
- --{ name = 'luasnip', option = { use_show_condition = false } },
- { name = "gh_issues" },
- { name = "nvim_lsp", max_item_count = 6 },
- { name = "nvim_lua" },
- --{ name = "luasnip" },
- --{ name = "luasnip", keyword_length = 4 },
- --{ name = "buffer", keyword_length = 3 },
- { name = "path" },
- { name = "buffer", max_item_count = 6 },
- --{ name = "buffer", option = { get_bufnrs = function()
- -- return vim.api.nvim_list_bufs()
- --end
- --}},
- { name = "cmp_git" },
- { name = "spell" },
- { name = "zsh" },
- { name = "treesitter" },
- { name = "calc" },
- { name = "nvim_lsp_signature_help" },
- --{ name = "cmdline" },
- --{ name = 'treesitter' },
- --{ name = "cmdline", keyword_pattern = [=[[^[:blank:]\!]*]=] }, --exclamation mark hangs a bit without this
- --{name = 'luasnip', keyword_length = 2},
+ { name = 'nvim_lsp' },
+ { name = 'luasnip' },
+ { name = 'buffer' },
}),
- formatting = {
- --formatting = {
- --local icons = kind_icons
- --format = function(entry, vim_item)
- ----vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
- ----vim_item.kind = lspkind.presets.default[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.kind = string.format("%s %s", icons[vim_item.kind], vim_item.kind)
- --vim_item.menu = ({
- ----nvim_lsp = "LSP",
- ----luasnip = "snip",
- ----buffer = "buf",
- ----path = "path",
- ----cmdline = "cmd",
- --buffer = "[buf]",
- --nvim_lsp = "[LSP]",
- --nvim_lua = "[api]",
- --path = "[path]",
- --luasnip = "[snip]",
- --cmdline = "[cmd]",
- --gh_issues = "[issues]",
- --})[entry.source.name]
- --return vim_item
- --end,
- format = lspkind.cmp_format({
- with_text = true,
- menu = {
- nvim_lsp = "[LSP]",
- luasnip = "[snip]",
- buffer = "[buf]",
- nvim_lua = "[api]",
- path = "[path]",
- gh_issues = "[issues]",
- spell = "[spell]",
- zsh = "[zsh]",
- treesitter = "[treesitter]",
- calc = "[calc]",
- nvim_lsp_signature_help = "[signature]",
- cmdline = "[cmd]",
- },
- }),
- --},
-
- --
- --
- --fields = { "abbr", "kind", "menu" },
- -- format = lspkind.cmp_format({
- -- mode = 'symbol_text', -- show only symbol annotations
- -- maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)
- -- })
- --format = require('lspkind').cmp_format {
- -- with_text = true,
- -- menu = {
- -- luasnip = "Snip",
- -- buffer = "Buf",
- -- nvim_lsp = "LSP",
- -- path = "Path",
- -- cmdline = "Cmd",
- -- cmp_git = "Git",
- -- },
- --},
- },
- --format = function(entry, vim_item)
- -- -- Kind icons
- -- --vim_item.kind = string.format("%s", kind_icons[vim_item.kind])
- -- vim_item.kind = lspkind.presets.default[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 = ({
- -- nvim_lsp = "LSP",
- -- luasnip = "Snip",
- -- buffer = "Buf",
- -- path = "Path",
- -- cmdline = "Cmd",
- -- })[entry.source.name]
- -- return vim_item
- --end,
- confirm_opts = {
- behavior = cmp.ConfirmBehavior.Replace,
- select = false,
- },
-
- event = {},
-
- experimental = {
- ghost_text = true, -- this feature conflicts with copilot.vim's preview.
- hl_group = "Nontext",
- --native_menu = false,
- },
-
- view = {
- entries = { name = "custom", selection_order = "top_down" },
- },
-
- window = {
- --completion = cmp.config.window.bordered(),
- completion = {
- border = { "", "", "", " ", "", "", "", " " },
- --border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" },
- --border = { '', '', '', '', '', '', '', '' },
- --border = "CmpBorder",
- winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,CursorLine:PmenuSel,Search:None",
- --winhighlight = "Normal:CmpPmenu,CursorLine:PmenuSel,Search:None",
- },
- --documentation = cmp.config.window.bordered(),
- documentation = {
- --max_height = math.floor(WIDE_HEIGHT * (WIDE_HEIGHT / vim.o.lines)),
- --max_width = math.floor((WIDE_HEIGHT * 2) * (vim.o.columns / (WIDE_HEIGHT * 2 * 16 / 9))),
- border = { "", "", "", " ", "", "", "", " " },
- --border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" },
- winhighlight = "FloatBorder:NormalFloat",
- },
- },
-})
-
-cmp.setup.cmdline({ "/", "?" }, {
- mapping = cmp.mapping.preset.cmdline(),
- sources = {
- { name = "buffer" },
- },
})
-cmp.setup.cmdline(":", {
- mapping = {
- ["<C-p>"] = cmp.mapping(cmp.mapping.select_prev_item(), { "i", "c" }),
- ["<C-n>"] = cmp.mapping(cmp.mapping.select_next_item(), { "i", "c" }),
- ["<C-y>"] = cmp.mapping(cmp.mapping.confirm({ select = true }), { "i", "c" }),
- ["<C-e>"] = cmp.mapping(cmp.mapping.close(), { "i", "c" }),
- ["<C-u>"] = cmp.mapping(cmp.mapping.scroll_docs(-4), { "i", "c" }),
- ["<C-d>"] = cmp.mapping(cmp.mapping.scroll_docs(4), { "i", "c" }),
- ["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
- --["<C-k>"] = cmp.mapping.select_prev_item(),
- --["<C-j>"] = cmp.mapping.select_next_item(),
- --['<C-y>'] = cmp.mapping.confirm({ select = true }),
- --["<C-e>"] = cmp.mapping.close(),
- ----['<CR>'] = cmp.config.disable,
- --["<C-u>"] = cmp.mapping.scroll_docs(-4),
- --["<C-d>"] = cmp.mapping.scroll_docs(4),
- --["<C-Space>"] = cmp.mapping.complete(),
- },
-
- sources = cmp.config.sources({
- { name = "path" },
- }, {
- --{ name = "cmdline" },
- { name = "cmdline", keyword_pattern = [=[[^[:blank:]\!]*]=], keyword_length = 3 },
- }),
-})
+vim.cmd([[
+ highlight! link CmpItemMenu Comment
+ " gray
+ highlight! CmpItemAbbrDeprecated guibg=NONE gui=strikethrough guifg=#808080
+ " blue
+ highlight! CmpItemAbbrMatch guibg=NONE guifg=#569CD6
+ highlight! CmpItemAbbrMatchFuzzy guibg=NONE guifg=#569CD6
+ " light blue
+ highlight! CmpItemKindVariable guibg=NONE guifg=#9CDCFE
+ highlight! CmpItemKindInterface guibg=NONE guifg=#9CDCFE
+ highlight! CmpItemKindText guibg=NONE guifg=#9CDCFE
+ " pink
+ highlight! CmpItemKindFunction guibg=NONE guifg=#C586C0
+ highlight! CmpItemKindMethod guibg=NONE guifg=#C586C0
+ " front
+ highlight! CmpItemKindKeyword guibg=NONE guifg=#D4D4D4
+ highlight! CmpItemKindProperty guibg=NONE guifg=#D4D4D4
+ highlight! CmpItemKindUnit guibg=NONE guifg=#D4D4D4
+ ]])
+
+ return true
+end
-return {
- "micangl/cmp-vimtex",
- config = function()
- require("cmp_vimtex").setup({
- additional_information = {
- info_in_menu = true,
- info_in_window = true,
- info_max_length = 60,
- match_against_info = true,
- symbols_in_menu = true,
- },
- bibtex_parser = {
- enabled = true,
- },
- search = {
- browser = "xdg-open",
- default = "google_scholar",
- search_engines = {
- google_scholar = {
- name = "Google Scholar",
- get_url = require("cmp_vimtex").url_default_format("https://scholar.google.com/scholar?hl=en&q=%s"),
- },
- -- Other search engines.
- },
- },
- })
- end,
-}
+return M