The no_symbol_match makes command line completion a lot less useful. It disables any matches for file names with symbols in them. This prevents completing things like ":b foo/bar" to ":b foo/bar.txt" or ":b foo_" to ":b baz/foo_bar.txt". Add an option `disallow_symbol_nonprefix_matching` that prevents a match if it contains a symbol and isn't a prefix match. Make that option the default. Add the option to documentation and tests. Add to the examples for command line setup disabling the option.
123 lines
2.9 KiB
Lua
123 lines
2.9 KiB
Lua
local compare = require('cmp.config.compare')
|
|
local types = require('cmp.types')
|
|
|
|
local WIDE_HEIGHT = 40
|
|
|
|
---@return cmp.ConfigSchema
|
|
return function()
|
|
---@type cmp.ConfigSchema
|
|
local config = {
|
|
enabled = function()
|
|
local disabled = false
|
|
disabled = disabled or (vim.api.nvim_buf_get_option(0, 'buftype') == 'prompt')
|
|
disabled = disabled or (vim.fn.reg_recording() ~= '')
|
|
disabled = disabled or (vim.fn.reg_executing() ~= '')
|
|
return not disabled
|
|
end,
|
|
|
|
performance = {
|
|
debounce = 60,
|
|
throttle = 30,
|
|
fetching_timeout = 500,
|
|
confirm_resolve_timeout = 80,
|
|
async_budget = 1,
|
|
max_view_entries = 200,
|
|
},
|
|
|
|
preselect = types.cmp.PreselectMode.Item,
|
|
|
|
mapping = {},
|
|
|
|
snippet = {
|
|
expand = function(_)
|
|
error('snippet engine is not configured.')
|
|
end,
|
|
},
|
|
|
|
completion = {
|
|
autocomplete = {
|
|
types.cmp.TriggerEvent.TextChanged,
|
|
},
|
|
completeopt = 'menu,menuone,noselect',
|
|
keyword_pattern = [[\%(-\?\d\+\%(\.\d\+\)\?\|\h\w*\%(-\w*\)*\)]],
|
|
keyword_length = 1,
|
|
},
|
|
|
|
formatting = {
|
|
expandable_indicator = true,
|
|
fields = { 'abbr', 'kind', 'menu' },
|
|
format = function(_, vim_item)
|
|
return vim_item
|
|
end,
|
|
},
|
|
|
|
matching = {
|
|
disallow_fuzzy_matching = false,
|
|
disallow_fullfuzzy_matching = false,
|
|
disallow_partial_fuzzy_matching = true,
|
|
disallow_partial_matching = false,
|
|
disallow_prefix_unmatching = false,
|
|
disallow_symbol_nonprefix_matching = true,
|
|
},
|
|
|
|
sorting = {
|
|
priority_weight = 2,
|
|
comparators = {
|
|
compare.offset,
|
|
compare.exact,
|
|
-- compare.scopes,
|
|
compare.score,
|
|
compare.recently_used,
|
|
compare.locality,
|
|
compare.kind,
|
|
-- compare.sort_text,
|
|
compare.length,
|
|
compare.order,
|
|
},
|
|
},
|
|
|
|
sources = {},
|
|
|
|
confirmation = {
|
|
default_behavior = types.cmp.ConfirmBehavior.Insert,
|
|
get_commit_characters = function(commit_characters)
|
|
return commit_characters
|
|
end,
|
|
},
|
|
|
|
event = {},
|
|
|
|
experimental = {
|
|
ghost_text = false,
|
|
},
|
|
|
|
view = {
|
|
entries = {
|
|
name = 'custom',
|
|
selection_order = 'top_down',
|
|
},
|
|
docs = {
|
|
auto_open = true,
|
|
},
|
|
},
|
|
|
|
window = {
|
|
completion = {
|
|
border = { '', '', '', '', '', '', '', '' },
|
|
winhighlight = 'Normal:Pmenu,FloatBorder:Pmenu,CursorLine:PmenuSel,Search:None',
|
|
scrolloff = 0,
|
|
col_offset = 0,
|
|
side_padding = 1,
|
|
scrollbar = true,
|
|
},
|
|
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 = { '', '', '', ' ', '', '', '', ' ' },
|
|
winhighlight = 'FloatBorder:NormalFloat',
|
|
},
|
|
},
|
|
}
|
|
return config
|
|
end
|