feat: add blink.cmp and disable custom completion pipeline

This commit is contained in:
2026-04-17 02:37:17 +02:00
parent f4d3a35171
commit ad45c6fdf6
6 changed files with 160 additions and 17 deletions
+4
View File
@@ -37,6 +37,10 @@ require("pack").setup({
"https://github.com/stevearc/oil.nvim",
"https://github.com/hedyhli/outline.nvim",
"https://github.com/jiaoshijie/undotree",
{
"https://github.com/saghen/blink.cmp",
version = vim.version.range("^1"),
},
{
"https://github.com/tree-sitter/tree-sitter-bash",
ts_parser = "bash",
+37 -3
View File
@@ -99,9 +99,7 @@ vim.keymap.set("n", "gr", "<Nop>")
vim.cmd.aunmenu({ "PopUp.-1-" })
vim.cmd.aunmenu({ "PopUp.How-to\\ disable\\ mouse" })
-- Insert-mode Emacs bindings
vim.keymap.set("i", "<C-f>", "<Right>")
vim.keymap.set("i", "<C-b>", "<Left>")
-- Insert-mode Emacs bindings (C-f/C-b live further down inside hover_scroll_map)
vim.keymap.set("i", "<C-a>", "<C-o>^")
vim.keymap.set("i", "<C-e>", function()
-- Fall through to Vim's default (close popup + revert) during completion.
@@ -160,8 +158,43 @@ vim.keymap.set("n", "K", function()
vim.lsp.buf.hover({ max_width = 80 })
end)
vim.keymap.set({ "i", "s" }, "<C-s>", function()
local winid = vim.b.lsp_floating_preview
if winid and vim.api.nvim_win_is_valid(winid) then
vim.api.nvim_win_close(winid, false)
return
end
vim.lsp.buf.signature_help({ max_width = 80 })
end)
---@param mode string | string[]
---@param key string
---@param direction "up" | "down"
---@param count integer
---@param fallback? string
local function hover_scroll_map(mode, key, direction, count, fallback)
vim.keymap.set(mode, key, function()
local winid = vim.b.lsp_floating_preview
if not winid or not vim.api.nvim_win_is_valid(winid) then
return fallback or key
end
vim.schedule(function()
local scroll_key = direction == "down" and vim.keycode("<C-e>")
or vim.keycode("<C-y>")
vim.api.nvim_win_call(winid, function()
vim.cmd.normal({
args = { count .. scroll_key },
bang = true,
})
end)
end)
return ""
end, { expr = true, replace_keycodes = true })
end
hover_scroll_map({ "n", "s" }, "<C-f>", "down", 5)
hover_scroll_map({ "n", "s" }, "<C-b>", "up", 5)
hover_scroll_map("i", "<C-f>", "down", 5, "<Right>")
hover_scroll_map("i", "<C-b>", "up", 5, "<Left>")
---@param key string
---@param dir 1 | -1
local function snippet_jump_map(key, dir)
@@ -174,6 +207,7 @@ local function snippet_jump_map(key, dir)
end
snippet_jump_map("<Tab>", 1)
snippet_jump_map("<S-Tab>", -1)
vim.keymap.set({ "n", "i" }, "<C-h>", vim.lsp.buf.document_highlight)
vim.keymap.set({ "n", "x" }, "<leader>lf", vim.lsp.buf.format)
vim.keymap.set("n", "grl", function()
+23 -8
View File
@@ -6,16 +6,9 @@ local GROUP = vim.api.nvim_create_augroup("ow.lsp.completion", { clear = true })
local popup = Popup.new()
local M = {}
---@param capabilities lsp.ClientCapabilities
function M.apply_capabilities(capabilities)
capabilities.textDocument.completion.completionItem.snippetSupport = true
end
---@param client vim.lsp.Client
---@param buf integer
function M.on_attach(client, buf)
local function on_attach(client, buf)
if
not client:supports_method(
vim.lsp.protocol.Methods.textDocument_completion
@@ -34,7 +27,29 @@ function M.on_attach(client, buf)
})
end
local M = {}
function M.setup()
vim.lsp.config("*", {
capabilities = {
textDocument = {
completion = {
completionItem = { snippetSupport = true },
},
},
},
})
vim.api.nvim_create_autocmd("LspAttach", {
group = GROUP,
callback = function(ev)
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if client then
on_attach(client, ev.buf)
end
end,
})
vim.api.nvim_create_autocmd("CompleteChanged", {
group = GROUP,
callback = function(ev)
+2 -6
View File
@@ -4,7 +4,6 @@
---@field context lsp.HandlerContext
local codelens = require("lsp.codelens")
local completion = require("lsp.completion")
local diagnostic = require("lsp.diagnostic")
local log = require("log")
@@ -43,8 +42,6 @@ local function on_attach(client, buf)
client.settings
) or client.settings
completion.on_attach(client, buf)
vim.api.nvim_clear_autocmds({ group = GROUP, buffer = buf })
vim.api.nvim_create_autocmd("LspProgress", {
buffer = buf,
@@ -91,8 +88,7 @@ function M.setup()
"zls",
})
local capabilities = vim.lsp.protocol.make_client_capabilities()
completion.apply_capabilities(capabilities)
local capabilities = require("blink.cmp").get_lsp_capabilities({}, true)
vim.lsp.config("*", {
capabilities = capabilities,
})
@@ -107,7 +103,7 @@ function M.setup()
end,
})
completion.setup()
-- require("lsp.completion").setup()
codelens.setup()
vim.lsp.log.set_level(vim.log.levels.WARN)
+5
View File
@@ -4,6 +4,11 @@
"rev": "e30b7f2008e52442154b66f7c519bfd2f1e32acb",
"src": "https://github.com/numToStr/Comment.nvim"
},
"blink.cmp": {
"rev": "78336bc89ee5365633bcf754d93df01678b5c08f",
"src": "https://github.com/saghen/blink.cmp",
"version": "1.0.0 - 2.0.0"
},
"fzf-lua": {
"rev": "1e866cce085cc6df3d3e4fb59f00105fa84cef6c",
"src": "https://github.com/ibhagwan/fzf-lua"
+89
View File
@@ -0,0 +1,89 @@
local blink = require("blink.cmp")
blink.setup({
completion = {
documentation = {
auto_show = true,
auto_show_delay_ms = 0,
window = {
winhighlight = "",
},
},
ghost_text = {
enabled = true,
},
list = {
selection = {
preselect = false,
auto_insert = false,
},
},
menu = {
border = "none",
draw = {
align_to = "simple_label",
columns = {
{ "simple_label" },
{ "kind_icon" },
},
components = {
simple_label = {
width = { fill = true, max = 60 },
text = function(ctx)
return ctx.label
end,
highlight = function(ctx)
local highlights = {
{
0,
#ctx.label,
group = ctx.deprecated
and "BlinkCmpLabelDeprecated"
or "BlinkCmpLabel",
},
}
for _, idx in ipairs(ctx.label_matched_indices) do
table.insert(highlights, {
idx,
idx + 1,
group = "BlinkCmpLabelMatch",
})
end
return highlights
end,
},
},
},
},
},
fuzzy = {
implementation = "prefer_rust_with_warning",
},
signature = {
enabled = true,
window = {
winhighlight = "",
show_documentation = false,
},
},
sources = {
default = {
"lsp",
"path",
"snippets",
},
transform_items = function(_, items)
---@param item blink.cmp.CompletionItem
return vim.tbl_map(function(item)
item.kind_icon, item.kind_hl =
require("lsp.kind").get(item.kind)
return item
end, items)
end,
},
keymap = {
preset = "default",
["<CR>"] = { "accept", "fallback" },
},
})