
## What is this PR for? Attempt for dynamic width and trimming between fields. Testing was done on my 15.6 laptop screen so maybe values could be raised in dynamic calculation? Also provides a `vim.g.cmp_fixed_width` for the users to be able to define a fixed width in their personal configuration if they'd like to. <!-- Describe the big picture of your changes to communicate to the maintainers why we should accept this pull request. --> ## Does this PR fix an existing issue? Attempts to rectify a concern raised in #3858 <!-- If this PR fixes any issues, please link to the issue here. Fixes #<issue_number> --> ## Checklist - [x] I've read the [CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md) guidelines. --------- Co-authored-by: Folke Lemaitre <folke.lemaitre@gmail.com>
224 lines
6.7 KiB
Lua
224 lines
6.7 KiB
Lua
return {
|
|
|
|
-- auto completion
|
|
{
|
|
"hrsh7th/nvim-cmp",
|
|
version = false, -- last release is way too old
|
|
event = "InsertEnter",
|
|
dependencies = {
|
|
"hrsh7th/cmp-nvim-lsp",
|
|
"hrsh7th/cmp-buffer",
|
|
"hrsh7th/cmp-path",
|
|
},
|
|
-- Not all LSP servers add brackets when completing a function.
|
|
-- To better deal with this, LazyVim adds a custom option to cmp,
|
|
-- that you can configure. For example:
|
|
--
|
|
-- ```lua
|
|
-- opts = {
|
|
-- auto_brackets = { "python" }
|
|
-- }
|
|
-- ```
|
|
opts = function()
|
|
vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true })
|
|
local cmp = require("cmp")
|
|
local defaults = require("cmp.config.default")()
|
|
local auto_select = true
|
|
return {
|
|
auto_brackets = {}, -- configure any filetype to auto add brackets
|
|
completion = {
|
|
completeopt = "menu,menuone,noinsert" .. (auto_select and "" or ",noselect"),
|
|
},
|
|
preselect = auto_select and cmp.PreselectMode.Item or cmp.PreselectMode.None,
|
|
mapping = cmp.mapping.preset.insert({
|
|
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
|
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
|
["<C-Space>"] = cmp.mapping.complete(),
|
|
["<CR>"] = LazyVim.cmp.confirm({ select = auto_select }),
|
|
["<C-y>"] = LazyVim.cmp.confirm({ select = true }),
|
|
["<S-CR>"] = LazyVim.cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
|
["<C-CR>"] = function(fallback)
|
|
cmp.abort()
|
|
fallback()
|
|
end,
|
|
}),
|
|
sources = cmp.config.sources({
|
|
{ name = "nvim_lsp" },
|
|
{ name = "path" },
|
|
}, {
|
|
{ name = "buffer" },
|
|
}),
|
|
formatting = {
|
|
format = function(entry, item)
|
|
local icons = LazyVim.config.icons.kinds
|
|
if icons[item.kind] then
|
|
item.kind = icons[item.kind] .. item.kind
|
|
end
|
|
|
|
local widths = {
|
|
abbr = vim.g.cmp_widths and vim.g.cmp_widths.abbr or 40,
|
|
menu = vim.g.cmp_widths and vim.g.cmp_widths.menu or 30,
|
|
}
|
|
|
|
for key, width in pairs(widths) do
|
|
if item[key] and vim.fn.strdisplaywidth(item[key]) > width then
|
|
item[key] = vim.fn.strcharpart(item[key], 0, width - 1) .. "…"
|
|
end
|
|
end
|
|
|
|
return item
|
|
end,
|
|
},
|
|
experimental = {
|
|
ghost_text = {
|
|
hl_group = "CmpGhostText",
|
|
},
|
|
},
|
|
sorting = defaults.sorting,
|
|
}
|
|
end,
|
|
main = "lazyvim.util.cmp",
|
|
},
|
|
|
|
-- snippets
|
|
{
|
|
"nvim-cmp",
|
|
dependencies = {
|
|
{
|
|
"garymjr/nvim-snippets",
|
|
opts = {
|
|
friendly_snippets = true,
|
|
},
|
|
dependencies = { "rafamadriz/friendly-snippets" },
|
|
},
|
|
},
|
|
opts = function(_, opts)
|
|
opts.snippet = {
|
|
expand = function(item)
|
|
return LazyVim.cmp.expand(item.body)
|
|
end,
|
|
}
|
|
if LazyVim.has("nvim-snippets") then
|
|
table.insert(opts.sources, { name = "snippets" })
|
|
end
|
|
end,
|
|
keys = {
|
|
{
|
|
"<Tab>",
|
|
function()
|
|
return vim.snippet.active({ direction = 1 }) and "<cmd>lua vim.snippet.jump(1)<cr>" or "<Tab>"
|
|
end,
|
|
expr = true,
|
|
silent = true,
|
|
mode = { "i", "s" },
|
|
},
|
|
{
|
|
"<S-Tab>",
|
|
function()
|
|
return vim.snippet.active({ direction = -1 }) and "<cmd>lua vim.snippet.jump(-1)<cr>" or "<S-Tab>"
|
|
end,
|
|
expr = true,
|
|
silent = true,
|
|
mode = { "i", "s" },
|
|
},
|
|
},
|
|
},
|
|
|
|
-- auto pairs
|
|
{
|
|
"echasnovski/mini.pairs",
|
|
event = "VeryLazy",
|
|
opts = {
|
|
modes = { insert = true, command = true, terminal = false },
|
|
-- skip autopair when next character is one of these
|
|
skip_next = [=[[%w%%%'%[%"%.%`%$]]=],
|
|
-- skip autopair when the cursor is inside these treesitter nodes
|
|
skip_ts = { "string" },
|
|
-- skip autopair when next character is closing pair
|
|
-- and there are more closing pairs than opening pairs
|
|
skip_unbalanced = true,
|
|
-- better deal with markdown code blocks
|
|
markdown = true,
|
|
},
|
|
keys = {
|
|
{
|
|
"<leader>up",
|
|
function()
|
|
vim.g.minipairs_disable = not vim.g.minipairs_disable
|
|
if vim.g.minipairs_disable then
|
|
LazyVim.warn("Disabled auto pairs", { title = "Option" })
|
|
else
|
|
LazyVim.info("Enabled auto pairs", { title = "Option" })
|
|
end
|
|
end,
|
|
desc = "Toggle Auto Pairs",
|
|
},
|
|
},
|
|
config = function(_, opts)
|
|
LazyVim.mini.pairs(opts)
|
|
end,
|
|
},
|
|
|
|
-- comments
|
|
{
|
|
"folke/ts-comments.nvim",
|
|
event = "VeryLazy",
|
|
opts = {},
|
|
},
|
|
|
|
-- Better text-objects
|
|
{
|
|
"echasnovski/mini.ai",
|
|
event = "VeryLazy",
|
|
opts = function()
|
|
LazyVim.on_load("which-key.nvim", function()
|
|
vim.schedule(LazyVim.mini.ai_whichkey)
|
|
end)
|
|
local ai = require("mini.ai")
|
|
return {
|
|
n_lines = 500,
|
|
custom_textobjects = {
|
|
o = ai.gen_spec.treesitter({ -- code block
|
|
a = { "@block.outer", "@conditional.outer", "@loop.outer" },
|
|
i = { "@block.inner", "@conditional.inner", "@loop.inner" },
|
|
}),
|
|
f = ai.gen_spec.treesitter({ a = "@function.outer", i = "@function.inner" }), -- function
|
|
c = ai.gen_spec.treesitter({ a = "@class.outer", i = "@class.inner" }), -- class
|
|
t = { "<([%p%w]-)%f[^<%w][^<>]->.-</%1>", "^<.->().*()</[^/]->$" }, -- tags
|
|
d = { "%f[%d]%d+" }, -- digits
|
|
e = { -- Word with case
|
|
{ "%u[%l%d]+%f[^%l%d]", "%f[%S][%l%d]+%f[^%l%d]", "%f[%P][%l%d]+%f[^%l%d]", "^[%l%d]+%f[^%l%d]" },
|
|
"^().*()$",
|
|
},
|
|
i = LazyVim.mini.ai_indent, -- indent
|
|
g = LazyVim.mini.ai_buffer, -- buffer
|
|
u = ai.gen_spec.function_call(), -- u for "Usage"
|
|
U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }), -- without dot in function name
|
|
},
|
|
}
|
|
end,
|
|
},
|
|
|
|
{
|
|
"folke/lazydev.nvim",
|
|
ft = "lua",
|
|
cmd = "LazyDev",
|
|
opts = {
|
|
library = {
|
|
{ path = "luvit-meta/library", words = { "vim%.uv" } },
|
|
{ path = "LazyVim", words = { "LazyVim" } },
|
|
{ path = "lazy.nvim", words = { "LazyVim" } },
|
|
},
|
|
},
|
|
},
|
|
-- Manage libuv types with lazy. Plugin will never be loaded
|
|
{ "Bilal2453/luvit-meta", lazy = true },
|
|
-- Add lazydev source to cmp
|
|
{
|
|
"hrsh7th/nvim-cmp",
|
|
opts = function(_, opts)
|
|
table.insert(opts.sources, { name = "lazydev", group_index = 0 })
|
|
end,
|
|
},
|
|
}
|