Lua 的 Neovim 常用配置

以下是一份基于 Lua 的 Neovim 常用配置指南,涵盖基础设置、插件管理、代码补全、语法高亮、文件导航等核心功能。所有配置基于现代最佳实践,支持模块化扩展。


目录结构

bash 复制代码
~/.config/nvim/
├── init.lua          # 主入口
└── lua/
    ├── core/         # 基础配置
    │   ├── options.lua
    │   ├── keymaps.lua
    │   └── autocommands.lua
    ├── plugins/      # 插件配置
    │   ├── lsp.lua
    │   ├── treesitter.lua
    │   └── telescope.lua
    └── plugins.lua   # 插件列表

1. 基础配置 (init.lua)

lua 复制代码
-- 加载核心模块
require("core.options")
require("core.keymaps")
require("core.autocommands")

-- 初始化插件管理器 Lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable",
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

-- 加载插件列表
require("plugins")

2. 核心配置模块

(1) 基础选项 (core/options.lua)
lua 复制代码
vim.opt.number = true           -- 行号
vim.opt.relativenumber = true   -- 相对行号
vim.opt.tabstop = 4             -- Tab 显示宽度
vim.opt.shiftwidth = 4          -- 自动缩进宽度
vim.opt.expandtab = true        -- Tab 转空格
vim.opt.mouse = "a"             -- 鼠标支持
vim.opt.termguicolors = true    -- 真彩色支持
vim.opt.cursorline = true       -- 高亮当前行
vim.opt.signcolumn = "yes"      -- 始终显示左侧标记列
vim.opt.splitright = true       -- 垂直分割在右侧打开
vim.opt.splitbelow = true       -- 水平分割在下方打开
(2) 快捷键映射 (core/keymaps.lua)
lua 复制代码
local keymap = vim.keymap

-- 通用快捷键
keymap.set("n", "<leader>w", ":w<CR>", { desc = "保存文件" })
keymap.set("n", "<leader>q", ":q<CR>", { desc = "关闭窗口" })
keymap.set("n", "<C-s>", ":source %<CR>", { desc = "重新加载配置" })

-- 窗口导航
keymap.set("n", "<C-h>", "<C-w>h", { desc = "跳转到左侧窗口" })
keymap.set("n", "<C-j>", "<C-w>j", { desc = "跳转到下方窗口" })
keymap.set("n", "<C-k>", "<C-w>k", { desc = "跳转到上方窗口" })
keymap.set("n", "<C-l>", "<C-w>l", { desc = "跳转到右侧窗口" })

-- 缓冲区管理
keymap.set("n", "<leader>bn", ":bnext<CR>", { desc = "下一个缓冲区" })
keymap.set("n", "<leader>bp", ":bprevious<CR>", { desc = "上一个缓冲区" })
(3) 自动命令 (core/autocommands.lua)
lua 复制代码
local autocmd = vim.api.nvim_create_autocmd

-- 保存时自动格式化
autocmd("BufWritePre", {
  pattern = "*",
  callback = function()
    vim.lsp.buf.format({ async = false })
  end
})

-- 进入文件时光标回到上次位置
autocmd("BufReadPost", {
  pattern = "*",
  callback = function()
    if vim.fn.line("'\"") > 1 and vim.fn.line("'\"") <= vim.fn.line("$") then
      vim.cmd("normal! g'\"")
    end
  end
})

3. 插件配置 (plugins.lua)

lua 复制代码
return {
  -- 主题插件
  { "catppuccin/nvim", name = "catppuccin", priority = 1000 },

  -- 文件树
  {
    "nvim-tree/nvim-tree.lua",
    dependencies = { "nvim-tree/nvim-web-devicons" },
    config = function()
      require("nvim-tree").setup()
      vim.keymap.set("n", "<leader>e", ":NvimTreeToggle<CR>", { desc = "Toggle File Tree" })
    end
  },

  -- 语法高亮增强
  {
    "nvim-treesitter/nvim-treesitter",
    build = ":TSUpdate",
    config = function()
      require("plugins.treesitter")
    end
  },

  -- LSP 配置
  {
    "neovim/nvim-lspconfig",
    dependencies = {
      "williamboman/mason.nvim",
      "williamboman/mason-lspconfig.nvim"
    },
    config = function()
      require("plugins.lsp")
    end
  },

  -- 自动补全
  {
    "hrsh7th/nvim-cmp",
    dependencies = {
      "hrsh7th/cmp-nvim-lsp",
      "hrsh7th/cmp-buffer",
      "L3MON4D3/LuaSnip"
    },
    config = function()
      require("plugins.cmp")
    end
  },

  -- 文件搜索
  {
    "nvim-telescope/telescope.nvim",
    dependencies = { "nvim-lua/plenary.nvim" },
    config = function()
      require("plugins.telescope")
    end
  }
}

4. 功能模块配置

(1) LSP 配置 (plugins/lsp.lua)
lua 复制代码
require("mason").setup()
require("mason-lspconfig").setup({
  ensure_installed = { "clangd", "pyright", "lua_ls" }
})

local lspconfig = require("lspconfig")
local capabilities = require("cmp_nvim_lsp").default_capabilities()

-- 通用 LSP 配置
local on_attach = function(client, bufnr)
  vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
  vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = bufnr, desc = "跳转到定义" })
  vim.keymap.set("n", "gr", vim.lsp.buf.references, { buffer = bufnr, desc = "查找引用" })
  vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = bufnr, desc = "显示文档" })
end

-- 语言服务器配置
lspconfig.clangd.setup({ capabilities = capabilities, on_attach = on_attach })
lspconfig.pyright.setup({ capabilities = capabilities, on_attach = on_attach })
lspconfig.lua_ls.setup({
  settings = {
    Lua = {
      diagnostics = { globals = { "vim" } }
    }
  }
})
(2) 自动补全 (plugins/cmp.lua)
lua 复制代码
local cmp = require("cmp")

cmp.setup({
  sources = cmp.config.sources({
    { name = "nvim_lsp" },
    { name = "buffer" },
  }),
  mapping = cmp.mapping.preset.insert({
    ["<C-b>"] = cmp.mapping.scroll_docs(-4),
    ["<C-f>"] = cmp.mapping.scroll_docs(4),
    ["<C-Space>"] = cmp.mapping.complete(),
    ["<CR>"] = cmp.mapping.confirm({ select = true }),
  }),
  snippet = {
    expand = function(args)
      require("luasnip").lsp_expand(args.body)
    end
  }
})

5. 常用插件推荐

分类 插件 功能描述
UI 增强 lualine.nvim 状态栏美化
Git 集成 gitsigns.nvim 行级 Git 状态显示
调试工具 nvim-dap 调试器集成
注释工具 Comment.nvim 快速注释代码
项目管理 project.nvim 自动识别项目根目录

6. 性能优化技巧

  1. 延迟加载插件

    lua 复制代码
    -- 按文件类型加载
    { "someone/plugin", ft = "python" }
    
    -- 按快捷键加载
    { "someone/plugin", keys = "<leader>p" }
  2. 禁用不需要的插件

    lua 复制代码
    -- 在 plugins.lua 中注释不需要的插件条目
    -- { "unused/plugin" }
  3. 定期清理插件

    vim 复制代码
    :Lazy clean  -- 删除未使用的插件

7. 启动性能分析

vim 复制代码
:Lazy profile  -- 查看插件加载时间
:StartupTime   -- 需要安装 [dstein64/vim-startuptime]

通过以上配置,你可以获得一个现代化的 Neovim 开发环境,支持代码智能提示、语法高亮、快速导航等功能。所有配置均可根据实际需求灵活调整。

相关推荐
郝YH是人间理想27 分钟前
Python面向对象
开发语言·python·面向对象
大土豆的bug记录2 小时前
鸿蒙进行视频上传,使用 request.uploadFile方法
开发语言·前端·华为·arkts·鸿蒙·arkui
hhw1991124 小时前
c#知识点补充3
开发语言·c#
Antonio9154 小时前
【Q&A】观察者模式在QT有哪些应用?
开发语言·qt·观察者模式
Pandaconda4 小时前
【后端开发面试题】每日 3 题(二十)
开发语言·分布式·后端·面试·消息队列·熔断·服务限流
mqwguardain5 小时前
python常见反爬思路详解
开发语言·python
lmy3477712325 小时前
东软鸿蒙C++开发面经
开发语言·c++
hakesashou6 小时前
python多线程和多进程的区别有哪些
java·开发语言·jvm
每次的天空6 小时前
项目总结:GetX + Kotlin 协程实现跨端音乐播放实时同步
android·开发语言·kotlin
网络安全指导员6 小时前
威胁驱动的网络安全方法论
开发语言·学习·安全·web安全·php