nvim配置lsp插件(基础走流程)


准备工具 neovim、 git


下载插件管理器 packer.nvim

Linux

git clone --depth 1 https://github.com/wbthomason/packer.nvim\
 ~/.local/share/nvim/site/pack/packer/start/packer.nvim

Windows

git clone https://github.com/wbthomason/packer.nvim "$env:LOCALAPPDATA
vim-data\site\pack\packer\start\packer.nvim"

创建配置文件

Linux 命令

mkdir -p  ~/.config/nvim/lua
touch ~/.config/nvim/init.lua
touch  ~/.config/nvim/lua/init-packer.lua

Windows PowerShell 命令

New-Item -Path "$env:LOCALAPPDATA
vim\lua" -ItemType Directory
New-Item -Path "$env:LOCALAPPDATA
vim\init.lua" -ItemType File
New-Item -Path "$env:LOCALAPPDATA
vim\lua\init-packer.lua" -ItemType File

编辑 init-packer.lua 文件,添加下面的内容

rtup(function()
  -- Packer can manage itself
  use 'wbthomason/packer.nvim'
  -- 把要管理的插件放这里,为了方便就把这叫 “管理区” 吧


end)

nvim启动后会加载 init.lua 配置文件

编辑init.lua添加下面内容,通过它加载init-packer.lua,注意不要写扩展名

require('init-packer')

按重启nvim 执行命令 :PackerSync

以后更改插件配置都需要 :PackerSync 更新和重新生成编译, 具体去看插件主页.

为了方便,当说“lua目录”没有别的说明时,是指 ~/.config/nvim/lua/目录

windows是 C:\Users\你的用户名\AppData\Local vim\lua

自动完成语言服务器配置

return require('packer').startup(function()
  -- Packer can manage itself
  use 'wbthomason/packer.nvim'
  -- lsp(语言服务器)自动配置相关
  use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client
  use 'hrsh7th/nvim-cmp' -- Autocompletion plugin
  use 'hrsh7th/cmp-nvim-lsp' -- LSP source for nvim-cmp
  use 'saadparwaiz1/cmp_luasnip' -- Snippets source for nvim-cmp
  use 'L3MON4D3/LuaSnip' -- Snippets plugin


end)


在lua目录创建 init-lspconfig.lua 文件 添加下面内容(这是nvim-lspconfig它们的配置)

-- Add additional capabilities supported by nvim-cmp
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities)
local lspconfig = require('lspconfig')
-- Enable some language servers with the additional completion capabilities offered by nvim-cmp
local servers = { 'clangd', 'rust_analyzer', 'pyright', 'tsserver' }
for _, lsp in ipairs(servers) do
  lspconfig[lsp].setup {
    -- on_attach = my_custom_on_attach,
    capabilities = capabilities,
  }
end
-- luasnip setup
local luasnip = require 'luasnip'
-- nvim-cmp setup
local cmp = require 'cmp'
cmp.setup {
  snippet = {
    expand = function(args)
      luasnip.lsp_expand(args.body)
    end,
  },
  mapping = cmp.mapping.preset.insert({
    [''] = cmp.mapping.scroll_docs(-4),
    [''] = cmp.mapping.scroll_docs(4),
    [''] = cmp.mapping.complete(),
    [''] = cmp.mapping.confirm {
      behavior = cmp.ConfirmBehavior.Replace,
      select = true,
    },
    [''] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_next_item()
      elseif luasnip.expand_or_jumpable() then
        luasnip.expand_or_jump()
      else
        fallback()
      end
    end, { 'i', 's' }),
    [''] = cmp.mapping(function(fallback)
      if cmp.visible() then
        cmp.select_prev_item()
      elseif luasnip.jumpable(-1) then
        luasnip.jump(-1)
      else
        fallback()
      end
    end, { 'i', 's' }),
  }),
  sources = {
    { name = 'nvim_lsp' },
    { name = 'luasnip' },
  },
}

然后在init.lua 添加 require('init-lspconfig.lua')

打开 init-lspconfig.lua 其中有一行 local servers = { 'clangd', 'rust_analyzer', 'pyright', 'tsserver' }

当你用 nvim 打开跟上面列表所列出的语言服务器对应的语言扩展名文件时,会自动生成对应语言服务器的配置。

如果没有安装语言服务器,会提示失败

手动安装语言服务器

安装 C++ 服务器、python服务器

我用的是arch
sudo pacman -S clang     
sudo pacman -S python-lsp-server
也可以 pip install python-lsp-server

将列表修改成这样,安装了什么服务器,就把对应名称添加入这个列表

local servers = { 'clangd', 'pylsp' }

现在使用 nvim 编写 main.py 或 main.cpp 应该有代码提示、错误检查了

自动安装语言服务器

把 use 'zhengqijun/nvim-lsp-installer' 放到 use 'LoganFeng/nvim-lspconfig' 的上面

在lua目录创建 init-lsp-installer.lua 添加下面内容

require("nvim-lsp-installer").setup({
    automatic_installation = true, -- automatically detect which servers to install (based on which servers are set up via lspconfig)
    ui = {
        icons = {
            server_installed = "✓",
            server_pending = "➜",
            server_uninstalled = "✗"
        }
    }

nvim-lsp-installer 需要 nvim-lspconfig

如果init-lsp-installer.lua的 automatic_installation = true

nvim-lsp-installer 会自动下载 local servers = { 'clangd', 'pylsp' } 所列出的语言服务器(感觉下载有点慢,但它只下载需要的,自己去找可能下载到多余的)

:LspInstallInfo 打开可提供下载的语言服务器预览列表

:LspInstall server 安装语言服务器(将server替换成你要安装的语言服务器的名称 )

:LspUninstall server 卸载语言服务器

:LspUninstallAll 卸载所有语言服务器


目录树插件, 将下面内容放到 管理区 (如果忘了管理区在哪,回文章开头找)

use {
    'kyazdani42/nvim-tree.lua',
    requires = {
      'kyazdani42/nvim-web-devicons', -- 可选依赖,使目录树文件有好看图标
    },
    config = function() require'nvim-tree'.setup {} end
}

在lua目录创建 keymap.lua 添加按键映射, 按Ctrl+n打开关闭目录树

vim.keymap.set('', '', ':NvimTreeToggle')
vim.keymap.set('!', '', ':NvimTreeToggle')

在init.lua添加 require('keymap')

下面的插件和配置代码全放入管理区

注释插件, 基础用法 选择代码 按 gcc 注释或去掉注释

use {
    'numToStr/Comment.nvim',
    config = function()
        require('Comment').setup()
    end
}

缓冲线插件(文件标签页?)

use{'akinsho/bufferline.nvim',
  config = function()
    require("bufferline").setup{}
  end
}

打开多个文件是这样的效果

nvim配置lsp插件(基础走流程)

状态栏

use{'windwp/windline.nvim',
  config = function()
    require('wlsample.basic')
  end
}

下图就是 wlsample.basic 的效果 去主页看看有好多样式,替换原来就行

nvim配置lsp插件(基础走流程)

主题插件

use({
    'NTBBloodbath/doom-one.nvim',
    config = function()
        require('doom-one').setup({
            cursor_coloring = false,
            terminal_colors = false,
            italic_comments = false,
            enable_treesitter = true,
            transparent_background = false,
            pumblend = {
                enable = true,
                transparency_amount = 20,
            },
            plugins_integrations = {
                neorg = true,
                barbar = true,
                bufferline = false,
                gitgutter = false,
                gitsigns = true,
                telescope = false,
                neogit = true,
                nvim_tree = true,
                dashboard = true,
                startify = true,
                whichkey = true,
                indent_blankline = true,
                vim_illuminate = true,
                lspsaga = false,
            },
        })
    end,
})

最后 init.lua 内容

require('init-packer')
require('init-lspinstaller')
require('init-lspconfig')
require('keymap')



我Github下载太慢,每次 :PackerSync 相当痛苦。最后想到这个办法

如果你也有这个问题可以试一试这个方法。

可以去gitee上找(需要注册个账号登录才能看到),实在没有自己拉个。然后在gitee下载(需要改点东西下面讲)。下面全是使用gitee地址。

下载 packer.nvim

Linux

git clone --depth 1 https://gitee.com/LoganFeng/packer.nvim\
 ~/.local/share/nvim/site/pack/packer/start/packer.nvim

Windows

git clone https://gitee.com/LoganFeng/packer.nvim "$env:LOCALAPPDATA
vim-data\site\pack\packer\start\packer.nvim"

编辑 packer.nvim包的 packer.lua文件

Linux 在

~/.local/share/nvim/site/pack/packer/start/packer.nvim/lua/packer.lua

Windows 在

~\AppData\Local vim-data\site\pack\packer\start\packer.nvim\lua\packer.lua

其中有一行 default_url_format = 'https://github.com/%s.git'

nvim配置lsp插件(基础走流程)

应该是把 %S 替换成填入的作者名/插件名,'https://github.com/作者名/仓库名.git'

所以把 github 部分改成 gitee。

既然都改成了gitee,那就要用 导入到gitee 后的名称了。每个插件都以它的 gitee克隆地址的红线框部分为准

nvim配置lsp插件(基础走流程)

比如,wbthomason/packer.nvim改成这样LoganFeng/packer.nvim

其他插件也一样按它们在gitee的名称来修改。

我github经常上不去, 我把我找的贴上来,替换上面的 init-packer.lua 内容即可

return require('packer').startup(function()
  -- Packer can manage itself
  use 'LoganFeng/packer.nvim'


  use 'zhengqijun/nvim-lsp-installer'


  use 'LoganFeng/nvim-lspconfig'
  use 'LoganFeng/nvim-cmp'
  use 'LoganFeng/cmp-nvim-lsp'
  use 'LoganFeng/cmp_luasnip'
  use 'LoganFeng/LuaSnip'


  -- 目录树
  use {
    'zhengqijun/nvim-tree.lua',
    requires = {
      'zhengqijun/nvim-web-devicons', -- optional, for file icon
    },
    config = function() require'nvim-tree'.setup {} end
}


--注释/去掉注释  按 gcc
use{ 'zhengqijun/Comment.nvim',
config = function()
  require('Comment').setup()
end
}


-- 缓冲线(文件标签页)
use{'HeLiangMsg/bufferline.nvim',
  config = function()
    require("bufferline").setup{}
  end
}


-- 状态栏
use{'pyy-huang-ting/windline.nvim',
  config = function()
    require('wlsample.basic')
  end
}


-- 主题
use({
  'LoganFeng/doom-one.nvim',
  config = function()
      require('doom-one').setup({
          cursor_coloring = false,
          terminal_colors = false,
          italic_comments = false,
          enable_treesitter = true,
          transparent_background = false,
          pumblend = {
              enable = true,
              transparency_amount = 20,
          },
          plugins_integrations = {
              neorg = true,
              barbar = true,
              bufferline = false,
              gitgutter = false,
              gitsigns = true,
              telescope = false,
              neogit = true,
              nvim_tree = true,
              dashboard = true,
              startify = true,
              whichkey = true,
              indent_blankline = true,
              vim_illuminate = true,
              lspsaga = false,
          },
      })
  end,
})


end)
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章