Проблема с настройкой Neovim для автозаполнения с помощью neovim/nvim-lspconfig

#lua #neovim

Вопрос:

Я пытался настроить автозаполнение для языков с neovim/nvim-lspconfig

Это код, который у меня есть до сих пор:

 set cot=menuone,noinsert shm =c
let g:completion_matching_strategy_list = ['exact', 'substring', 'fuzzy']

nnoremap <leader>vd :lua vim.lsp.buf.definition()<CR>
nnoremap <leader>vi :lua vim.lsp.buf.implementation()<CR>
nnoremap <leader>vsh :lua vim.lsp.buf.signature_help()<CR>
nnoremap <leader>vrr :lua vim.lsp.buf.references()<CR>
nnoremap <leader>vrn :lua vim.lsp.buf.rename()<CR>
nnoremap <leader>vh :lua vim.lsp.buf.hover()<CR>
nnoremap <leader>vca :lua vim.lsp.buf.code_action()<CR>
nnoremap <leader>vsd :lua vim.lsp.util.show_line_diagnostics(); vim.lsp.util.show_line_diagnostics()<CR>
command! -buffer -nargs=0 LspShowLineDiagnostics lua require'jumpLoc'.openLineDiagnostics()
nnoremap <buffer><silent> <C-h> <cmd>LspShowLineDiagnostics<CR>

:lua << EOF
  local nvim_lsp = require('lspconfig')
  local on_attach = function(_, bufnr)
    require('completion').on_attach()
  end
  local servers = {'clangd', 'pyright', 'gopls'}
  for _, lsp in ipairs(servers) do
    nvim_lsp[lsp].setup {
      on_attach = on_attach,
    }
  end
EOF
 

Когда я пытаюсь их протестировать, я могу получать только проверки предупреждений и подсветку синтаксиса. Я не могу заставить автозаполнение работать. Кто-нибудь знает, нужно ли мне включить параметр или переменную среды, чтобы включить это?

Комментарии:

1. какой плагин автозаполнения вы используете?

2. Завершение-nvim устарел, пожалуйста, используйте вместо него nvim-cmp .

Ответ №1:

да. ваша проблема в том, что вы call подключаетесь вместо returning it

в этом-то и проблема

   local on_attach = function(_, bufnr)
    require('completion').on_attach()
  end
 

измените приведенный выше код на

   local on_attach = function(_, bufnr)
    return require('completion').on_attach
  end
 

и вот:

     nvim_lsp[lsp].setup {
      on_attach = on_attach,
    }
 

вы анализируете on_attach функцию, вам не разрешается ее вызывать, вы pass the function object

из completion-nvim документов (https://github.com/nvim-lua/completion-nvim#setup):

 lua require'lspconfig'.pyls.setup{on_attach=require'completion'.on_attach}
 

они передают функцию вместо того, чтобы вызывать ее.

просто попробуйте этот пример readme , хорошо? и расскажите мне о результатах