nvim-cmp source for filesystem paths, employing fd and regular expressions to
find files.
Depends on fuzzy.nvim (which depends
either on fzf or on fzy).
To facilitate fuzzy matching, when cmp-fuzzy-path tries to find a path the
path is first transformed to a regular expression like this: p/t/f -->
p.*/.*t.*/.*f.', which will match path/to/file and also
pa/toooo/other_file.
To prevent excessive invocations of this plugin, the completion will only be
triggered when the string currently being entered matches a path regular
expression. To quickly trigger completions, make sure to either use a leading /
or a leading './'
In spcecial cases, while in command mode, the plugin will be invoked regardless
to facilitate faster file searching. This behaviour is implemented only when the
first character of the command is in {'e', 'w'}.
Using Packer with fzf:
use {'nvim-telescope/telescope-fzf-native.nvim', run = 'make'}
use "hrsh7th/nvim-cmp"
use {'tzachar/cmp-fuzzy-path', 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-path', requires = {'hrsh7th/nvim-cmp', 'tzachar/fuzzy.nvim'}}You should have fd in your PATH, or edit the configuation to point at the
exact location.
require'cmp'.setup {
  sources = cmp.config.sources({
    { name = 'fuzzy_path'},
  })
}This plugin can also be used to complete file names for :edit or :write in cmdline mode of cmp:
cmp.setup.cmdline(':', {
  sources = cmp.config.sources({
    { name = 'fuzzy_path' }
  })
})Note: the plugin's name is fuzzy_path in cmp's config.
Configuration can be passed when configuring cmp:
cmp.setup.cmdline(':', {
  sources = cmp.config.sources({
    { name = 'fuzzy_path', option = {fd_timeout_msec = 1500} }
  })
})Default: 500
How much grace to give the file finder before killing it. If you set this to too short a value, you will probably not get enough suggestions.
Default: {'fd', '-d', '20', '-p'}
The commend to use as a file finder. Note that -p is needed so we match on the
entire path, not just on the file or directory name.
Please note that, by default, fd returns only files. If you want directories,
you need to add -t d -t f to fd_cmd table.
cmp-fuzzy-path adds a score entry to each completion item's data field,
which can be used to override cmp's default sorting order:
local compare = require('cmp.config.compare')
cmp.setup({
  sorting = {
    priority_weight = 2,
    comparators = {
      require('cmp_fuzzy_path.compare'),
      compare.offset,
      compare.exact,
      compare.score,
      compare.recently_used,
      compare.kind,
      compare.sort_text,
      compare.length,
      compare.order,
    },
  },
}cmp-fuzzy-path add the following commands:
CmpFuzzyStats can be used to gather statistics about the operation of the
plugin. Output contains the following:
- Total Usage Count: how many times the plugin was called
- Timeout Count: how many times we reached a timeout
- Average Search Time: the average time it took to complete the search