Neovim을 위한 자동 완성

NeoVim으로 생산성을 높일 수 있는 가장 멋진 기능 중 하나는 자동 완성이므로 성능에 따라 플러그인을 선택할 수 있습니다.
  • YouCompleteMe
  • Coc.nvim

  • 이 플러그인은 사용하기 좋지만 Javascript 및 Python 때문에 매우 무거워서 다른 솔루션으로 전환하기로 결정했습니다.
    솔루션은 nvim-cmp이라는 Lua Plugin입니다.
    이 플러그인을 사용하면 최소한의 성능으로 네오빔에 자동 완성 기능을 추가할 수 있습니다. 언어 서버를 다운로드하기만 하면 됩니다.

    설치



    플러그인을 설치하기 전에 Lua를 먼저 설치해야 합니다.

    $ sudo pacman -S lua
    


    다음 중에서 선택할 수 있는 플러그인 관리자가 필요합니다.
  • vim-plug(이것을 사용함)
  • 병원체
  • 번들

  • nvim-cmp 플러그인을 설치한 후 일부 외부 플러그인을 설치해야 합니다.

    " ~/.config/nvim/init.nvim
    
        Plug 'hrsh7th/cmp-nvim-lsp'
        Plug 'hrsh7th/cmp-buffer'
        Plug 'hrsh7th/cmp-path'
        Plug 'hrsh7th/cmp-cmdline'
        Plug 'hrsh7th/nvim-cmp'
        Plug 'hrsh7th/vim-vsnip'
    


    해당 언어의 서버를 설치한 후 활성화하려면 Lua 코드가 필요할 수 있습니다.
    이 코드를 사용하여 init.nvim 파일에 복사하여 붙여넣을 수 있습니다.
    또한 확인this page을 잊지 말고 귀하의 언어에 맞는 서버를 얻으십시오.

    제 경우에는 rust-analyzer을 설치하겠습니다.

    $ sudo pacman -S rust-analyzer
    



    " ~/.config/nvim/init.nvim
    lua <<EOF
      -- Setup nvim-cmp.
      local cmp = require'cmp'
    
      cmp.setup({
        snippet = {
          -- REQUIRED - you must specify a snippet engine
          expand = function(args)
            vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
            -- require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
            -- require('snippy').expand_snippet(args.body) -- For `snippy` users.
            -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
          end,
        },
        mapping = {
          ['<C-b>'] = 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, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
          ['<C-e>'] = cmp.mapping({
            i = cmp.mapping.abort(),
            c = cmp.mapping.close(),
          }),
          ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
        },
        sources = cmp.config.sources({
          { name = 'nvim_lsp' },
          { name = 'vsnip' }, -- For vsnip users.
          -- { name = 'luasnip' }, -- For luasnip users.
          -- { name = 'ultisnips' }, -- For ultisnips users.
          -- { name = 'snippy' }, -- For snippy users.
        }, {
          { name = 'buffer' },
        })
      })
    
      -- 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' }
        })
      })
    
      -- Setup lspconfig.
      local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
    
      -- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
    
      require'lspconfig'.rust_analyzer.setup{
          capabilities = capabilities,
      }
    
    EOF
    
    


    CTRL+B 또는 CTRL+F를 사용하여 코드 제안에서 스크롤할 수 있습니다.

    좋은 웹페이지 즐겨찾기