---
title: "Neovim/LazyVim 使用指南"
description: "在 2020 年时间我就接触了 Neovim，在这一段时间，我一直使用的是 "
date: "2024-10-14"
tags:
  - "Linux"
canonical: "https://www.kanoverse.com/post/neovim-lazyvim-guide"
---

在 2020 年时间我就接触了 Neovim，在这一段时间，我一直使用的是 [coc.nvim](https://github.com/neoclide/coc.nvim)，coc.nvim 陪我度过了我成长的时期。也许是因为换回了 windows 系统，并且 windows 系统下的 terminal 真的很不好用，所以这几年就没有怎么用过 Vim 了。我很喜欢 Vim 哲学和 Vim 的键盘体验 ~也很喜欢 VsCode~。

在这几年之间我也陆续看到类似于 NvChad、LunarVim、[AstroNvim](https://astronvim.com/#)、[LazyVim](https://www.lazyvim.org/) 等 Neovim distros，本文作为重返 Neovim 的记录。

# 重拾配置

我的 GitHub 仓库中一直保留着我的 Neovim 配置，当时使用的配置如下：

```shell
" 插件设置
call plug#begin('~/AppData/Local/nvim/plugged')

Plug 'neoclide/coc.nvim', {'branch': 'release'}

Plug 'luochen1990/rainbow'
Plug 'Yggdroot/indentLine'

Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

Plug 'connorholyday/vim-snazzy'

call plug#end()

" coc.nvim 配置
let g:coc_global_extensions = [
            \ 'coc-json',
            \ 'coc-marketplace',
            \ 'coc-spell-checker',
            \ 'coc-html',
            \ 'coc-pairs',
            \ 'coc-emmet',
            \ 'coc-css',
            \ 'coc-eslint',
            \ 'coc-vetur',
            \ 'coc-tsserver',
            \ 'coc-explorer',
            \ 'coc-lists',
            \ 'coc-vimlsp']
```

其中最核心的插件是 coc.nvim，它也相当于一个插件系统（~用插件管理器安装插件管理器~），coc.nvim 的目标是 `Make your Vim/Neovim as smart as VS Code` 。

![Image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0af95488-1cde-4510-902e-48852deb2725%2Fimage.png?table=block&id=df7cdc04-0892-82e0-82ee-817ac8dcfa44&cache=v2&width=1400)

![Image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2Fb98e8132-910a-49e9-99f1-fb814e384347%2Fimage.png?table=block&id=0bbcdc04-0892-82d0-870b-81d726ac1f7d&cache=v2&width=1400)



随着 Neovim 社区的发展，有很多懒人包被开发了出来，像是 23 年出来的 LazyVim 的涨星速度比同类的开源项目都要快。于是我尝试了一下 LazyVim 果断抛弃了 coc.nvim。

为什么不继续使用 coc.nvim 了？

1.  coc.nvim 需要 Node.js 依赖。
2.  coc.nvim 不够懒，没有针对 coc.nvim 所开发的 Neovim distros。
3.  nvim 的插件系统已经可以完全替代 coc.nvim 了。

# LazyVim 的安装

直接将懒人模板克隆到 nvim 配置目录就可以了。

```shell
git clone https://github.com/LazyVim/starter ~/.config/nvim
```

## LazyVim 的使用

![Image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F33e48774-37b5-4bf2-99aa-55ae2dd241ad%2Fimage.png?table=block&id=974cdc04-0892-825c-82ca-817d4b765b0c&cache=v2&width=1400)

打开 Neovim，输入 `:Lazy` 就可以进入 LazyVim 的管理面板，这里可以看到已经安装好的插件、插件是否有更新等等。

LazyVim starter template（懒人模板）默认帮你安装了[这些插件](https://www.lazyvim.org/plugins)。注意不要被 [Keymaps](https://www.lazyvim.org/keymaps) 所误导，Keymaps 是 LazyVim 提供的所有插件的快捷键速览（包括非默认安装的插件，也就是 LazyVim Extras 扩展插件等）。

# 编程语言支持

LazyVim starter template 还提供了扩展配置（LazyVim Extras），LazyVim Extras 其实是一组插件的集合（这和 VsCode 中的 Extension Pack 是一样的），这其中包括了依赖管理、提供了默认配置等功能。

比如我需要安装 Python 环境的支持， 输入 `:LazyExtras` 然后找到 `lang.python` 就可以一键安装 Python 开发所需要的一系列扩展。具体的实现可以查看 [LazyVim Extras 的源码](https://github.com/LazyVim/LazyVim/tree/main/lua/LazyVim/plugins/extras)。

# 自定义配置

## Plugins

通过 LazyExtras 安装 Python 语言支持，发现 venv-selector 无法找到 miniconda 的虚拟环境。

```lua
{
    "linux-cultist/venv-selector.nvim",
    branch = "regexp", -- Use this branch for the new version
    cmd = "VenvSelect",
    enabled = function()
      return LazyVim.has("telescope.nvim")
    end,
    opts = {
      settings = {
        options = {
          notify_user_on_venv_activation = true,
        },
      },
    },
    --  Call config for python files and load the cached venv automatically
    ft = "python",
    keys = { { "<leader>cv", "<cmd>:VenvSelect<cr>", desc = "Select VirtualEnv", ft = "python" } },
  },
```

查看源码我们可以发现，LazyVim 默认使用的是 venv-selector.nvim 中的 regexp 分支。于是我们到 Github 查看这个分支看到了 [My venvs dont show up - how can i create my own search?](https://github.com/linux-cultist/venv-selector.nvim/tree/regexp?tab=readme-ov-file#my-venvs-dont-show-up---how-can-i-create-my-own-search) ，根据 README 在 `~/.config/nvim/lua/plugins` 下面新建一个 `venv-selector` 的配置即可，LazyVim 会自动的将配置文件 Merge，所以不用担心你会修改到 LazyVim 的默认配置！

![Image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F0f6f71b4-1462-4f89-8a82-912c09b35b3b%2Fimage.png?table=block&id=3d2cdc04-0892-8330-8b3e-81c1117eee80&cache=v2&width=1400)

## 按键映射

![Image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F69ee6f76-f8bf-40c0-a95a-469dca45d2f2%2F91b2d431-0706-44b2-9724-a174a1f5b406%2Fimage.png?table=block&id=b63cdc04-0892-82d7-838e-8194f63e9874&cache=v2&width=1400)

修改按键映射也很简单，在 `~/.config/nvim/lua/config/keymaps.lua` 添加自己的配置即可。

# 继续探索吧

想要更好的使用 Neovim 当然还需要熟悉 LazyVim 帮你安装的各类默认插件是干嘛的，了解 Vim/Neovim 圈子的生态等等，这都是值得花一番时间去学习的。
