cmp-path icon indicating copy to clipboard operation
cmp-path copied to clipboard

Adding cmp-path breaks completion

Open nimeco opened this issue 2 years ago • 0 comments

Greetings, I noticed that pressing <Tab> on the Cmdline mode stopped working, even though wildmenu was set to on. I thought the mappings were the culprit and using :verbose map <Tab> only showed:

s  <Tab>       * <Cmd>call v:lua.cmp.utils.keymap.set_map(11)<CR>
        Last set from Lua

Tried locating where v:lua.cmp.utils.keymap.set_map was being set and it turns out to be in nvim-cmp\lua\cmp\utils\keymap.lua, line 228 here. Added a print to see what was being set (is there a better way to debug those?) and the outcome was:

mode:i lhs:<Up> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(1)<CR>
mode:c lhs:<Up> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(2)<CR>
mode:i lhs:<C-E> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(3)<CR>
mode:c lhs:<C-E> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(4)<CR>
mode:c lhs:<S-Tab> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(5)<CR>
mode:i lhs:<C-P> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(6)<CR>
mode:c lhs:<C-P> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(7)<CR>
mode:i lhs:<C-N> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(8)<CR>
mode:c lhs:<C-N> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(9)<CR>
mode:i lhs:<CR> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(10)<CR>
mode:s lhs:<Tab> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(11)<CR>
mode:i lhs:<Tab> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(12)<CR>
mode:c lhs:<Tab> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(13)<CR>
mode:i lhs:<C-Space> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(14)<CR>
mode:c lhs:<C-Space> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(15)<CR>
mode:i lhs:<C-F> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(16)<CR>
mode:c lhs:<C-F> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(17)<CR>
mode:i lhs:<Down> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(18)<CR>
mode:c lhs:<Down> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(19)<CR>
mode:i lhs:<C-D> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(20)<CR>
mode:c lhs:<C-D> rhs:<Cmd>call v:lua.cmp.utils.keymap.set_map(21)<CR>

So, <Tab> is being set to something in Cmdline mode, even though :verbose map <Tab> didn't show it. (Why's that?) I don't really know if the above has any relation with the issue.

So I went for the minimum config and found out that, when adding nvim-cmp with cmp-path, the issue would happen. <Tab> is set in config-cmp.lua but it seems it's not respecting that config.

Also, opening Neovim without doing anything, since it lazy loads the plugin because of event being set(? I suppose, new at packer), if I enter the Cmdline mode, autocompletion works. After going into Insert mode and triggering it an event, autocomplete breaks. Disabling cmp-path makes Cmdline autocomplete work back again.

  • Vim type (vim/gvim/neovim): Neovim
  • Vim version: v0.7.0-dev+1201-g5760cf87b
  • OS: Windows

Thanks a lot!

init.lua:

require"plugins"

plugins.lua:

local fn = vim.fn
local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'

if fn.empty(fn.glob(install_path)) > 0 then
    packer_boostrap = fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
end

vim.cmd [[
augroup packer_user_config
autocmd!
autocmd BufWritePost */nvim/lua/plugins.lua source <afile> | PackerSync
augroup end
]]

local status_ok, packer = pcall(require, "packer")
if not status_ok then
    return
end

packer.init {
    display = {
        open_fn = function()
            return require('packer.util').float { border = "rounded" }
        end,
    },
}

return packer.startup(function(use)
    use { "wbthomason/packer.nvim" }
    use { "hrsh7th/nvim-cmp", config = "require('config-cmp')", event = {'BufRead', 'BufNewFile', 'InsertEnter'}}
    use { "hrsh7th/cmp-path", after = "nvim-cmp" }

    if packer_boostrap then
        require('packer').sync()
    end
end)

config-cmp.lua:

local cmp = require'cmp'
local luasnip = require"luasnip"

local cmp_kinds = {
    Text = '  ',
    Method = '  ',
    Function = '  ',
    Constructor = '  ',
    Field = '  ',
    Variable = '  ',
    Class = '  ',
    Interface = '  ',
    Module = '  ',
    Property = '  ',
    Unit = '  ',
    Value = '  ',
    Enum = '  ',
    Keyword = '  ',
    Snippet = '  ',
    Color = '  ',
    File = '  ',
    Reference = '  ',
    Folder = '  ',
    EnumMember = '  ',
    Constant = '  ',
    Struct = '  ',
    Event = '  ',
    Operator = '  ',
    TypeParameter = '  ',
}

local has_words_before = function()
    local line, col = unpack(vim.api.nvim_win_get_cursor(0))
    return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end

cmp.setup({
    mapping = {
        ['<C-d>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
        ['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
        ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
        ['<C-y>'] = cmp.config.disable, -- If you want to remove the default `<C-y>` mapping, You can specify `cmp.config.disable` value.
        ['<C-e>'] = cmp.mapping({
            i = cmp.mapping.abort(),
            c = cmp.mapping.close(),
        }),
        ['<CR>'] = cmp.mapping.confirm({
            behavior = cmp.ConfirmBehavior.Insert,
            select = false
        }),
        ["<Tab>"] = cmp.mapping(function(fallback)
            if cmp.visible() then
                cmp.select_next_item()
            elseif has_words_before() then
                cmp.complete()
            else
                fallback()
            end
        end, { "i", "s" }),
    },
    sources = cmp.config.sources({
        { name = 'luasnip' }, -- For luasnip users.
    },
    {
        { name = 'buffer' },
        }),
    formatting = {
        fields = {"kind", "abbr", "menu"},
        format = function(entry, vim_item)
            vim_item.kind = string.format('%s %s', cmp_kinds[vim_item.kind] or "", vim_item.kind)
            vim_item.menu = ({
                nvim_lsp = "[LSP]",
                nvim_lua = "[Lua]",
                luasnip = "[LuaSnip]",
                buffer = "[Buffer]",
            })[entry.source.name]
            return vim_item
        end,
    },
    experimental = {
        ghost_text = true,
    },
})

-- Set configuration for specific filetype.
cmp.setup.filetype('gitcommit', {
    sources = cmp.config.sources({
    { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it.
    }, {
        { name = 'buffer' },
        })
})

-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline('/', {
    sources = {
    { name = 'buffer' }
    }
})

-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(':', {
    sources = cmp.config.sources({
    { name = 'path' }
    }, {
        { name = 'cmdline' }
        })
})

nimeco avatar Mar 16 '22 22:03 nimeco