跳转至

LazyVim 开箱即用

为什么要学 LazyVim

LazyVim 是 Neovim 的一个预配置框架,由 lazy.nvim 插件管理器的作者 folke 打造。它提供了经过精心调校的开箱即用体验,同时保持完全可定制性。对于不想从零配置 Neovim 但又想要一个专业级开发环境的用户来说,LazyVim 是最佳起点——它预装了 LSP、补全、搜索、Git、调试等必备功能,你只需要关注个性化定制。


核心概念

概念白话解释用途
Extras可选功能包按需启用语言支持和特性
Keymaps统一快捷键一致且可记忆的键位设计
Which-key按键提示按 Leader 键后显示可用操作
Lazy Loading延迟加载只在需要时加载插件
Override覆盖配置在不修改源码的情况下定制
Dashboard启动面板快速访问最近项目和功能

安装配置

前置要求

# Neovim >= 0.9.0
nvim --version

# 必需工具
# git, ripgrep, fd, lazygit (可选), node (用于部分 LSP)
sudo apt install ripgrep fd-find

# Nerd Font(图标显示)
# 从 https://www.nerdfonts.com/ 下载安装

安装

# 备份旧配置
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak

# 克隆 LazyVim starter
git clone https://github.com/LazyVim/starter ~/.config/nvim

# 删除 .git(变成你自己的配置)
rm -rf ~/.config/nvim/.git

# 启动 Neovim(自动安装插件)
nvim

目录结构

~/.config/nvim/
├── init.lua                    # 入口(不要修改)
├── lazyvim.json                # extras 配置
├── lua/
│   ├── config/
│   │   ├── autocmds.lua        # 自定义自动命令
│   │   ├── keymaps.lua         # 自定义快捷键
│   │   ├── lazy.lua            # lazy.nvim 配置(不要修改)
│   │   └── options.lua         # 自定义选项
│   └── plugins/
│       ├── example.lua         # 你的插件配置放这里
│       └── ...

快速上手

核心快捷键

Leader 键 = 空格

文件:
  <leader>ff  查找文件
  <leader>fr  最近文件
  <leader>fg  全局搜索(grep)
  <leader>e   文件浏览器
  <leader>E   文件浏览器(cwd)

缓冲区:
  <leader>bb  切换缓冲区
  <leader>bd  关闭缓冲区
  H/L         前/后缓冲区

代码:
  gd          跳转定义
  gr          查看引用
  K           悬浮文档
  <leader>cr  重命名
  <leader>ca  代码操作
  <leader>cf  格式化

搜索替换:
  <leader>sr  搜索替换(Spectre)

Git:
  <leader>gg  打开 LazyGit
  <leader>gs  Git 状态

终端:
  <C-/>       打开终端

启用 Extras

<leader> 然后输入 :LazyExtras 查看和启用可用的功能包:

常用 Extras:
lang.python        Python 支持(pyright + ruff)
lang.typescript     TypeScript 支持
lang.rust           Rust 支持
lang.go             Go 支持
lang.java           Java 支持
lang.json           JSON 支持
lang.yaml           YAML 支持
lang.markdown       Markdown 预览
lang.docker         Docker 支持

coding.copilot      GitHub Copilot
coding.codeium      Codeium AI 补全
editor.mini-files   迷你文件浏览器
test.core           测试运行器
dap.core            调试器

自定义选项

-- lua/config/options.lua
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.relativenumber = true
vim.opt.scrolloff = 10
vim.opt.wrap = true

进阶用法

添加插件

-- lua/plugins/my-plugins.lua
return {
  -- 添加新插件
  {
    "folke/zen-mode.nvim",
    keys = { { "<leader>z", "<cmd>ZenMode<cr>", desc = "Zen Mode" } },
    opts = { window = { width = 90 } },
  },

  -- 修改已有插件配置
  {
    "nvim-neo-tree/neo-tree.nvim",
    opts = {
      filesystem = {
        filtered_items = {
          visible = true,  -- 显示隐藏文件
        },
      },
    },
  },

  -- 禁用内置插件
  { "folke/flash.nvim", enabled = false },
}

自定义快捷键

-- lua/config/keymaps.lua
local map = vim.keymap.set

-- 自定义快捷键
map("n", "<leader>ww", "<cmd>w<cr>", { desc = "保存文件" })
map("n", "J", "mzJ`z", { desc = "合并行(保持光标位置)" })
map("v", "J", ":m '>+1<CR>gv=gv", { desc = "下移选中行" })
map("v", "K", ":m '<-2<CR>gv=gv", { desc = "上移选中行" })

-- 删除默认快捷键
vim.keymap.del("n", "<leader>l")

自定义 LSP

-- lua/plugins/lsp.lua
return {
  {
    "neovim/nvim-lspconfig",
    opts = {
      servers = {
        pyright = {
          settings = {
            python = {
              analysis = {
                typeCheckingMode = "basic",
                autoImportCompletions = true,
              },
            },
          },
        },
        -- 添加新的 LSP
        clangd = {},
        gopls = {
          settings = {
            gopls = {
              analyses = { unusedparams = true },
              staticcheck = true,
            },
          },
        },
      },
    },
  },
}

自定义主题

-- lua/plugins/colorscheme.lua
return {
  {
    "catppuccin/nvim",
    name = "catppuccin",
    opts = {
      flavour = "mocha",
      transparent_background = true,
      integrations = {
        cmp = true,
        gitsigns = true,
        treesitter = true,
        telescope = { enabled = true },
        neo_tree = true,
        which_key = true,
      },
    },
  },
  -- 设为默认主题
  {
    "LazyVim/LazyVim",
    opts = { colorscheme = "catppuccin" },
  },
}

调试配置

-- 启用 dap extra 后
-- lua/plugins/dap.lua
return {
  {
    "mfussenegger/nvim-dap",
    config = function()
      local dap = require("dap")

      -- Python 调试
      dap.configurations.python = {
        {
          type = "python",
          request = "launch",
          name = "Launch file",
          program = "${file}",
          pythonPath = function()
            return "/usr/bin/python3"
          end,
        },
      }
    end,
  },
}

-- 调试快捷键:
-- <leader>db  切换断点
-- <leader>dc  继续执行
-- <leader>di  步入
-- <leader>do  步出
-- <leader>dt  终止

常见问题

Q: 启动速度慢?

  • 运行 :Lazy profile 查看插件加载时间
  • 确保插件使用了延迟加载
  • 禁用不需要的 extras

Q: 如何更新?

:Lazy update        " 更新插件
:Lazy sync          " 同步插件状态
对于 LazyVim 框架本身的更新,它作为一个插件也会被 :Lazy update 更新。

Q: 自定义配置不生效?

  • 确保文件在正确位置(lua/plugins/lua/config/
  • LazyVim 的配置通过 opts 合并,不是覆盖
  • 使用 :Lazy debug 排查问题

Q: 与 NvChad/AstroNvim 相比?

  • LazyVim:最活跃、配置最合理、扩展性最好
  • NvChad:界面美观、适合前端开发
  • AstroNvim:功能全面但配置稍复杂

参考资源

  • 官网:https://www.lazyvim.org/
  • GitHub:https://github.com/LazyVim/LazyVim
  • Starter:https://github.com/LazyVim/starter
  • 按键映射参考:https://www.lazyvim.org/keymaps
  • Extras 列表:https://www.lazyvim.org/extras