nvim-cmp source for fuzzy matched items from using the current buffer.
Can use either fzf or fzy.
Depends on fuzzy.nvim (which depends
either on fzf or on fzy).
Using Packer with fzf:
use {'nvim-telescope/telescope-fzf-native.nvim', run = 'make'}
use "hrsh7th/nvim-cmp"
use {'tzachar/cmp-fuzzy-buffer', requires = {'hrsh7th/nvim-cmp', 'tzachar/fuzzy.nvim'}}Using Packer with fzy:
use {'romgrk/fzy-lua-native', run = 'make'}
use "hrsh7th/nvim-cmp"
use {'tzachar/cmp-fuzzy-buffer', requires = {'hrsh7th/nvim-cmp', 'tzachar/fuzzy.nvim'}}require'cmp'.setup {
sources = cmp.config.sources({
{ name = 'fuzzy_buffer' },
})
}This plugin can also be used to perform / searches with cmdline mode of cmp:
cmp.setup.cmdline('/', {
sources = cmp.config.sources({
{ name = 'fuzzy_buffer' }
})
})In / search mode, the plugin will match the input string as is, without
parsing out tokens. This enables fuzzy search containing, for example, spaces.
Note: the plugin's name is fuzzy_buffer in cmp's config.
By default, nvim-cmp will filter out sequences which we matched. To prevent
this, we use the searched-for pattern as an input for filterText, such that
all matched strings will be returned. However, this causes nvim-cmp to badly
sort our returned results. To solve this issue, and sort cmp-fuzzy-path
results by the score returned by the fuzzy matcher, you can use the following:
local compare = require('cmp.config.compare')
cmp.setup {
sorting = {
priority_weight = 2,
comparators = {
require('cmp_fuzzy_buffer.compare'),
compare.offset,
compare.exact,
compare.score,
compare.recently_used,
compare.kind,
compare.sort_text,
compare.length,
compare.order,
}
},
}Default: [[\%(-\?\d\+\%(\.\d\+\)\?\|\h\w*\%([\-.]\w*\)*\)]]
_ cmdline Default:_ [=[[^[:blank:]].*]=]
A vim's regular expression for detecting the pattern to search with (starting from where the cursor currently is)
Default:
indentifier_patter = [=[[[:keyword:]]]=]Used to find the best matched identifier to return based on the fuzzy patter and match results.
Default:
non_indentifier_patter = [=[[^[:keyword:]]]=],Used to find the best matched identifier to return based on the fuzzy patter and match results.
The plugin will not work in buffers with more than max_buffer_lines lines for
performance reasons.
Default: 20000
Do not show matches longer than max_match_length.
Default: 50
Do not show matches shorter than min_match_length.
Default: 1
This has different meaning depending on the fuzzy matching library used.
For fzf, this is the case_mode argument: 0 = smart_case, 1 = ignore_case, 2 = respect_case.
For fzy, this is the is_case_sensitive argument. Set to false to do case insensitive matching.
Default: 0
Return a list of buffer numbers from which to get lines.
Default:
get_bufnrs = function()
return { vim.api.nvim_get_current_buf() }
endIf you want to use all loaded buffer, you can use the following setup:
require'cmp'.setup {
sources = cmp.config.sources({
{
name = 'fuzzy_buffer' ,
option = {
get_bufnrs = function()
local bufs = {}
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
local buftype = vim.api.nvim_buf_get_option(buf, 'buftype')
if buftype ~= 'nofile' and buftype ~= 'prompt' then
bufs[#bufs + 1] = buf
end
end
return bufs
end
},
},
})
}Maximal number of matches to returl.
Default: 15