最基本的nvim配置

1,107 阅读4分钟

nvim能用来干什么?

说起来我一开始使用nvim的主要原因是:电脑太差跑不动idea,随便开上几个编辑区域就卡的要死,内存直接占满。于是我开始萌发出一个想法,一个编辑代码的工具需要这么重吗?我的自己答案很显然是不需要的。于是使用nvim的旅程开始了。

配置nvim的理念

想要配置一个诚心如意的nvim是一件非常漫长的事,不要操之过急,慢慢来需要什么加什么,一步一步来,没必要一次性全部配置完成

必须要求

项目所在地

在安装完nvim后,打开终端运行 nvim后会在C:\Users\用户名\AppData\Local下生成一个nvim-data,这是之后nvim插件的储存地址。

C:\Users\用户名\AppData\Local下新建一个nvim文件夹,这是我们放置nvim配置文件的地方

正式开始配置nvim

理论上nvim文件夹内只需要一个文件:init.lua。nvim会直接读取里面的代码,然后呈现出定制化的编辑器。 但是为了好管理我们的nvim配置,首先区分出三大块:初始化配置--init.lua键盘映射--keymap.lua插件管理--plugins

init.lua是nvim默认文件,lua文件夹是nvim默认目录,于是大致目录呈现如此:

nvim/
│
├── lua/
│   ├── plugins/
|   |   ├── sub-plugin1/
│   |   └── sub-plugin2/  
|   └── keymap.lua
│
└── init.lua

基本配置--init.lua

这里举一些例子:

-- 基础设置
vim.g.mapleader = " "             -- 设置 leader 键为空格
vim.opt.number = true             -- 显示行号
vim.opt.relativenumber = true     -- 显示相对行号
vim.opt.tabstop = 2               -- Tab 显示为 2 个空格
vim.opt.shiftwidth = 2            -- 自动缩进为 2 个空格
vim.opt.expandtab = true          -- 将 Tab 转为空格
vim.opt.smartindent = true        -- 智能缩进
vim.opt.wrap = false              -- 禁用换行
vim.opt.cursorline = true         -- 高亮当前行
vim.opt.clipboard = "unnamedplus" -- 系统剪贴板支持
vim.opt.termguicolors = true      -- 启用 24 位颜色支持
vim.opt.ignorecase = true         -- 搜索忽略大小写
vim.opt.smartcase = true          -- 智能大小写区分
vim.opt.incsearch = true          -- 增量搜索
vim.opt.hlsearch = true           -- 高亮搜索结果
vim.opt.updatetime = 300          -- 更快的触发时间
vim.opt.timeoutlen = 500          -- 键组合超时
vim.opt.encoding = "utf-8"        -- 设置文件编码
vim.opt.fileencoding = "utf-8"
vim.opt.backup = false            -- 禁用备份
vim.opt.writebackup = false       -- 禁用写入备份
vim.opt.swapfile = false          -- 禁用交换文件
vim.opt.foldmethod = 'syntax'     -- 启用基于语法的折叠
vim.opt.foldenable = true

vim下有许多参数可以选并配置包括不限于:vim.g vim.opt vim.api vim.fn等等,反正用到就加一行。

基本键盘映射--keymap.lua

以下是简单的键盘映射,具体怎么配置纯看自己怎么舒服怎么来,完全是自己定制

local function map(m, k, v, desc)
  vim.keymap.set(m, k, v, { silent = true, desc = desc, noremap = true })
end

map('n', '<C-a>', 'ggVG', 'Select all of N')
map('i', '<C-a>', '<Esc>ggVG', 'Select all of I')
map('i', '<C-s>', '<Esc>:w<CR>', 'Save')
map('n', '<C-s>', ':w<CR>', 'Save')
map('i', '<C-z>', '<Esc>ui', 'revocation operation')
map('n', '<C-z>', '<Esc>u', 'revocation operation')
map('i', '<C-r>', '<Esc><C-r>i', 'recover revocation operation')
map('n', '<C-c>', 'y', 'Copy')
map('i', '<C-c><C-l>', '<Esc>Vy', 'Copy')
map('n', '<C-c><C-l>', 'Vy', 'Copy')
map('i', '<C-d>', '<Esc>yypi', '往下复制当前行')
map('n', '<C-d>', 'yyp', '往下复制当前行')
map('i', '<C-v>', '<Esc>pi', 'Paste')
map('n', '<C-v>', 'p', 'Paste')
map('n', '<leader>w', '<CMD>wa<CR>', '全部保存')
map('i', 'jk', '<Esc>', 'Esc')
map('n', 'qq', '<CMD>q!<CR>', '强制退出')
map('n', '<leader>qq', function()
  vim.ui.input({ prompt = "Are you sure you want to quit without saving? (y/n/w): " }, function(input)
    if input == "w" or input == "W" then
      vim.cmd("wa")
      vim.cmd("qa")
    elseif input == "y" or input == "Y" then
      -- 确认退出,执行退出命令
      vim.cmd('qa!')
    else
      -- 取消退出,什么都不做
      print("Exit cancelled")
    end
  end)
end, '强制退出所有')

基本插件配置

采用lazy.nvim进行插件管理

init.lua中添加

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or 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('lazy').setup({ import = 'plugins' }, {
  checker = {
    enabled = true,
    notify = false,
  },
  change_detection = { notify = false }
})
=

\lua\plugins下新建文件 whichKey.lua(插件多种多样,这里只是举个例子,并非必须的),在whichKey.lua中添加以下代码

-- 键盘映射插件,
-- WhichKey在您键入时,会在弹出窗口中显示可用的键绑定来帮助您记住您的 Neovim 键盘映射。
-- github地址: https://github.com/folke/which-key.nvim
return {
  "folke/which-key.nvim",
  event = "VeryLazy",
  opts = {
  },
  keys = {
    {
      "<leader>?",
      function()
        require("which-key").show({ global = false })
      end,
      desc = "Buffer Local Keymaps (which-key)",
    },
  },
}

完成后重新启动nvim,nvim就会自动下载lazy.nvim,以及folke/which-key.nvim,类似如下界面

屏幕截图 2025-01-11 142835.png

总结

以上就是nvim的基本配置,从此为nvim编辑器打开了一道大门,之后代码补全和美化也都只是在上面的基础上不断添砖加瓦。之后会继续记录我的nvim配置,一步步健全nvim,美化nvim