From b3d90826a8f749ae7554d554ea896c7fcec070d1 Mon Sep 17 00:00:00 2001 From: pika Date: Wed, 26 Mar 2025 20:59:42 +0100 Subject: [PATCH] plug: changed nvim-cmp to blink-cmp --- lua/pika/plugins/lsp/blink-cmp.lua | 55 ++++++++++++ lua/pika/plugins/lsp/lspconfig.lua | 37 +------- lua/pika/plugins/lsp/nvim-cmp.lua | 139 ----------------------------- 3 files changed, 57 insertions(+), 174 deletions(-) create mode 100644 lua/pika/plugins/lsp/blink-cmp.lua delete mode 100644 lua/pika/plugins/lsp/nvim-cmp.lua diff --git a/lua/pika/plugins/lsp/blink-cmp.lua b/lua/pika/plugins/lsp/blink-cmp.lua new file mode 100644 index 0000000..ff271f6 --- /dev/null +++ b/lua/pika/plugins/lsp/blink-cmp.lua @@ -0,0 +1,55 @@ +return { + { + "saghen/blink.cmp", + -- optional: provides snippets for the snippet source + dependencies = { "rafamadriz/friendly-snippets" }, + + -- use a release tag to download pre-built binaries + version = "1.*", + -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust + -- build = 'cargo build --release', + -- If you use nix, you can build from source using latest nightly rust with: + -- build = 'nix run .#build-plugin', + + ---@module 'blink.cmp' + ---@type blink.cmp.Config + opts = { + -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) + -- 'super-tab' for mappings similar to vscode (tab to accept) + -- 'enter' for enter to accept + -- 'none' for no mappings + -- + -- All presets have the following mappings: + -- C-space: Open menu or open docs if already open + -- C-n/C-p or Up/Down: Select next/previous item + -- C-e: Hide menu + -- C-k: Toggle signature help (if signature.enabled = true) + -- + -- See :h blink-cmp-config-keymap for defining your own keymap + keymap = { preset = "super-tab" }, + + appearance = { + -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = "Nerd Font Mono", + }, + + -- (Default) Only show the documentation popup when manually triggered + completion = { documentation = { auto_show = false } }, + + -- Default list of enabled providers defined so that you can extend it + -- elsewhere in your config, without redefining it, due to `opts_extend` + sources = { + default = { "lsp", "path", "snippets", "buffer" }, + }, + + -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance + -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, + -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` + -- + -- See the fuzzy documentation for more information + fuzzy = { implementation = "prefer_rust" }, + }, + opts_extend = { "sources.default" }, + }, +} diff --git a/lua/pika/plugins/lsp/lspconfig.lua b/lua/pika/plugins/lsp/lspconfig.lua index 4b68229..9a31bb6 100644 --- a/lua/pika/plugins/lsp/lspconfig.lua +++ b/lua/pika/plugins/lsp/lspconfig.lua @@ -2,48 +2,15 @@ return { "neovim/nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, dependencies = { - { - "hrsh7th/nvim-cmp", - dependencies = { "hrsh7th/cmp-nvim-lsp", "L3MON4D3/LuaSnip", "saadparwaiz1/cmp_luasnip" }, - }, + { "saghen/blink.cmp" }, { "antosha417/nvim-lsp-file-operations", config = true }, { "folke/neodev.nvim", opts = {} }, }, config = function() local lspconfig = require("lspconfig") + local capabilities = require("blink.cmp").get_lsp_capabilities() local mason_lspconfig = require("mason-lspconfig") - local cmp_nvim_lsp = require("cmp_nvim_lsp") - local keymap = vim.keymap - - vim.api.nvim_create_autocmd("LspAttach", { - group = vim.api.nvim_create_augroup("UserLspConfig", {}), - callback = function(ev) - -- Buffer local mappings. - -- See `:help vim.lsp.*` for documentation on any of the below functions - local opts = { buffer = ev.buf, silent = true } - - opts.desc = "See available code actions" - keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts) -- see available code actions, in visual mode will apply to selection - - opts.desc = "Smart rename" - keymap.set("n", "rn", vim.lsp.buf.rename, opts) -- smart rename - - opts.desc = "Show buffer diagnostics" - keymap.set("n", "D", "Telescope diagnostics bufnr=0", opts) -- show diagnostics for file - - opts.desc = "Show line diagnostics" - keymap.set("n", "d", vim.diagnostic.open_float, opts) -- show diagnostics for line - - opts.desc = "Show documentation for what is under cursor" - keymap.set("n", "K", vim.lsp.buf.hover, opts) -- show documentation for what is under cursor - - opts.desc = "Restart LSP" - keymap.set("n", "rs", ":LspRestart", opts) -- mapping to restart lsp if necessary - end, - }) - -- used to enable autocompletion (assign to every lsp server config) - local capabilities = cmp_nvim_lsp.default_capabilities() -- Change the Diagnostic symbols in the sign column (gutter) -- (not in youtube nvim video) diff --git a/lua/pika/plugins/lsp/nvim-cmp.lua b/lua/pika/plugins/lsp/nvim-cmp.lua deleted file mode 100644 index 704a168..0000000 --- a/lua/pika/plugins/lsp/nvim-cmp.lua +++ /dev/null @@ -1,139 +0,0 @@ -return { - { - "hrsh7th/nvim-cmp", - event = "InsertEnter", - dependencies = { - "hrsh7th/cmp-buffer", -- source for text in buffer - "hrsh7th/cmp-path", -- source for file system paths - { - "L3MON4D3/LuaSnip", - version = "v2.*", -- latest release of LuaSnip - build = "make install_jsregexp", -- optional regex support for LuaSnip - }, - "saadparwaiz1/cmp_luasnip", -- for autocompletion - "rafamadriz/friendly-snippets", -- useful snippets - "onsails/lspkind.nvim", -- vs-code like pictograms - }, - config = function() - local cmp = require("cmp") - local luasnip = require("luasnip") - local lspkind = require("lspkind") - - -- Load snippets from friendly-snippets and custom directory - require("luasnip.loaders.from_vscode").lazy_load() - require("luasnip.loaders.from_vscode").lazy_load({ paths = { "~/.config/nvim/snippets" } }) - - cmp.setup({ - completion = { - completeopt = "menu,menuone,preview,noselect", - }, - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - mapping = cmp.mapping.preset.insert({ - -- [""] = cmp.mapping({ - -- cmp.mapping.complete({ - -- config = { - -- sources = cmp.config.sources({ - -- { name = "cmp_ai" }, - -- }), - -- }, - -- }), - -- { "i" }, - -- }), - - [""] = cmp.mapping.select_prev_item(), -- previous suggestion - [""] = cmp.mapping.select_next_item(), -- next suggestion - [""] = cmp.mapping.scroll_docs(-4), - [""] = cmp.mapping.scroll_docs(4), - [""] = cmp.mapping.complete(), -- show completion suggestions - [""] = cmp.mapping.abort(), -- close completion window - [""] = cmp.mapping.confirm({ select = false }), - - -- Tab to complete - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.confirm({ select = true }) -- confirm selection - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - else - fallback() - end - end, { "i", "s" }), - }), - -- sources for autocompletion - sources = cmp.config.sources({ - { name = "nvim_lsp" }, - { name = "luasnip" }, -- snippets - { name = "buffer" }, -- text within current buffer - { name = "path" }, -- file system paths - -- { name = "cmp_ai" }, -- AI completion - }), - -- configure lspkind for vs-code like pictograms in completion menu - formatting = { - format = lspkind.cmp_format({ - mode = "symbol_text", -- show symbol text with icons - maxwidth = 130, - ellipsis_char = "...", - }), - }, - -- Enable rounded borders - window = { - completion = cmp.config.window.bordered(), - documentation = cmp.config.window.bordered(), - }, - experimental = { - ghost_text = true, -- This enables the inline ghost text - }, - }) - end, - }, - - -- { - -- -- ─< for ai use >────────────────────────────────────────────────────────────────────── - -- "tzachar/cmp-ai", - -- dependencies = { - -- "hrsh7th/nvim-cmp", - -- "tzachar/cmp-ai", - -- }, - -- - -- config = function() - -- local cmp = require("cmp") - -- local cmp_ai = require("cmp_ai.config") - -- - -- -- Setup cmp-ai configuration - -- cmp_ai:setup({ - -- max_lines = 100, - -- provider = "Ollama", - -- -- provider_options = { - -- -- model = "codellama:7b-code", - -- -- auto_unload = false, - -- -- raw_response_cb = function(response) - -- -- vim.notify(vim.inspect(response)) - -- -- vim.g.ai_raw_response = response - -- -- end, - -- -- }, - -- provider_options = { - -- model = "qwen2.5-coder:7b-base-q6_K", - -- prompt = function(lines_before, lines_after) - -- return "<|fim_prefix|>" .. lines_before .. "<|fim_suffix|>" .. lines_after .. "<|fim_middle|>" - -- end, - -- raw_response_cb = function(response) - -- vim.notify(vim.inspect(response)) - -- vim.g.ai_raw_response = response - -- end, - -- }, - -- notify = true, - -- notify_callback = function(msg) - -- vim.notify(msg) - -- end, - -- run_on_every_keystroke = true, - -- ignored_file_types = { - -- txt = true, - -- }, - -- }) - -- end, - -- }, -}