Filepath Completion in Neovim
May 17, 2022 - ⧖ 3 minI've had Plug 'hrsh7th/cmp-path'
in my plugins for ever but didn't notice
until recently that I wasn't getting any filepath completion in vim!
Fuller setup instructions below the TLDR
TL;DR
Turns out I need to not be a dope and configure nvim-cmp to actually use it...
local cmp = require'cmp'
cmp.setup({
-- removed rest of setup - see the rest in my dotfiles
sources = cmp.config.sources({
{ name = 'path' }, -- This needs to be here!
})
})
My Setup
For the sake of completeness here is how I currently (May 2022) configure completion in Neovim usin nvim-cmp
Plugins
I keep all my plugins in plugins.vim
call plug#begin(s:plug_dir)
Plug 'neovim/nvim-lspconfig'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'
" For ultisnips users.
<!-- " Plug 'SirVer/ultisnips' -->
<!-- " Plug 'quangnguyen30192/cmp-nvim-ultisnips' -->
call plug#end()
Vim Settings
My vim settings are also kept in their own file, settings.vim
set completeopt=menu,menuone,noselect
nvim-cmp configuration
I have a cmp.lua
file that gets sourced in init.lua
(file structure explained below) for configuring cmp.
-- Setup nvim-cmp.
local cmp = require'cmp'
cmp.setup({
snippet = {
-- REQUIRED - you must specify a snippet engine
expand = function(args)
-- For `ultisnips` user.
vim.fn["UltiSnips#Anon"](args.body)
end,
},
window = {
completion = cmp.config.window.bordered(),
},
mapping = {
['<Down>'] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }),
['<Up>'] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<Tab>'] = cmp.mapping(cmp.mapping.select_next_item(), { 'i', 's' }),
['<CR>'] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = true,
})
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'ultisnips' },
{ name = 'buffer' },
{ name = 'path' },
{ name = 'tmux' },
})
})
The sources
section is what was key for this post...
Piecing it together!
My init.vim
sources plugins and then settings and then finally calls init.lua
.
init.lua
sources my cmp.lua
file and BANG! auto-completion.
More sources
hrsh7th's wiki for nvim-cmp
is here and has example configs as well as a list of sources...
Don't forget to configure and not just install!