和过去好好的说一次『再见』
Tips:不是再也不见,是再见面可以很好的说声『你好』:IDE
飞机中的战斗机
众所周知原生的vim已经很强大了,而nvim又很友好的继承了这些优点,核心特点包括:
- 多模式操作:分为命令模式、插入模式和底线命令模式,通过键盘快捷键实现高效编辑,减少鼠标依赖。
- 跨平台支持:可在 Unix、Linux、macOS 和 Windows 等多种操作系统上运行。
- 高度可定制与扩展:支持通过 Vim 脚本(Vimscript)和海量插件(如 NERDTree、vim-multiple-cursors 等)自定义功能和界面。
- 丰富的编辑命令:提供强大的文本移动、搜索替换、宏录制和多寄存器剪贴板等功能,提升编辑效率。
道之所在
了解了其强大之所在,我们肯定想知道如何让其更智能更人性化一点,有些概念一时不懂没关系,往下看着看着就懂了,下面我们就开始一一介绍:
Neovim 的 API 主要分两类:
- Lua 原生 API:
vim.* 命名空间(推荐,高性能、易使用);
- Vimscript 兼容 API:
vim.cmd()/vim.fn(兼容老逻辑,按需使用)。
下面只讲 Lua API 中最实用、覆盖 90% 配置 / 插件开发场景的接口。
一、编辑器基础操作 API(配置必备)
1. 全局配置:vim.opt/vim.g/vim.wo/vim.bo
| 作用域 | 对应 API | 作用范围 | 示例 |
|---|
| 全局(全局生效) | vim.o/vim.opt | 整个 Neovim 实例 | vim.opt.number = true(所有窗口显示行号) |
| 窗口(当前窗口) | vim.wo | 仅当前窗口生效 | vim.wo.wrap = false(仅当前窗口禁用换行) |
| 缓冲区(当前文件) | vim.bo | 仅当前缓冲区生效 | vim.bo.expandtab = true(仅当前文件 Tab 转空格) |
| 全局变量(插件 / 脚本用) | vim.g | 全局 Lua/Vimscript 变量 | vim.g.mapleader = " "(设置 Leader 键) |
- 作用:设置编辑器全局 / 窗口 / 缓冲区配置(核心中的核心);
重点:vim.opt 是「增强版 vim.o」,支持更友好的语法(如 vim.opt.listchars = { tab = "→ " }),推荐优先使用 vim.opt。
界面显示类(最常用,影响视觉体验)
1. 行号 / 光标
| 配置项 | 类型 | 作用 | 示例 |
|---|
number | boolean | 显示绝对行号 | vim.opt.number = true |
relativenumber | boolean | 显示相对行号(更实用) | vim.opt.relativenumber = true |
cursorline | boolean | 高亮当前行 | vim.opt.cursorline = true |
cursorcolumn | boolean | 高亮当前列(少用,易干扰) | vim.opt.cursorcolumn = false |
signcolumn | string/boolean | 侧边符号列(LSP / 诊断 / 断点) | vim.opt.signcolumn = "yes"(始终显示,避免界面跳动) |
scrolloff | number | 滚动时光标上下保留的行数 | vim.opt.scrolloff = 15(避免光标贴顶 / 底) |
sidescrolloff | number | 横向滚动时光标左右保留的列数 | vim.opt.sidescrolloff = 10 |
- 字符 / 空格可视化
| 配置项 | 类型 | 作用 | 示例 |
|---|
list | boolean | 显示特殊字符(Tab / 空格 / 换行) | vim.opt.list = true |
listchars | table/string | 自定义特殊字符显示样式 | vim.opt.listchars = { tab = "→ ", trail = "-", space = "·" } |
showtabline | number | 显示标签栏的时机 | vim.opt.showtabline = 2(始终显示)、1(多标签时显示)、0(从不显示) |
wrap | boolean | 自动换行 | vim.opt.wrap = false(代码编辑推荐禁用) |
linebreak | boolean | 换行时不截断单词(wrap=true 时生效) | vim.opt.linebreak = true |
- 窗口 / 分屏
| 配置项 | 类型 | 作用 | 示例 |
|---|
splitright | boolean | 垂直分屏时新窗口在右侧 | vim.opt.splitright = true |
splitbelow | boolean | 水平分屏时新窗口在下方 | vim.opt.splitbelow = true |
winwidth/winheight | number | 窗口默认宽 / 高 | vim.opt.winwidth = 80 |
equalalways | boolean | 分屏后自动均分窗口大小 | vim.opt.equalalways = false(避免手动调整后被重置) |
编辑行为类(核心,影响编码体验)
1. 缩进 / 制表符(重中之重)
| 配置项 | 类型 | 作用 | 示例 |
|---|
expandtab | boolean | Tab 键转换为空格 | vim.opt.expandtab = true(代码编辑推荐) |
tabstop | number | Tab 键对应的空格数(显示用) | vim.opt.tabstop = 2 |
softtabstop | number | 编辑时 Tab / 退格对应的空格数 | vim.opt.softtabstop = 2 |
shiftwidth | number | 自动缩进 />>/<< 对应的空格数 | vim.opt.shiftwidth = 2 |
smartindent | boolean | 智能缩进(基础版,推荐 Treesitter 缩进) | vim.opt.smartindent = true |
autoindent | boolean | 新行继承上一行缩进 | vim.opt.autoindent = true |
cindent | boolean | C 语言风格缩进(适合编程) | vim.opt.cindent = true |
- 搜索 / 替换
| 配置项 | 类型 | 作用 | 示例 |
|---|
ignorecase | boolean | 搜索时忽略大小写 | vim.opt.ignorecase = true |
smartcase | boolean | 搜索词含大写时区分大小写(需 ignorecase=true) | vim.opt.smartcase = true |
hlsearch | boolean | 高亮搜索结果 | vim.opt.hlsearch = true |
incsearch | boolean | 实时搜索(输入时预览结果) | vim.opt.incsearch = true |
inccommand | string | 实时预览替换效果 | vim.opt.inccommand = "split"(分屏预览替换) |
- 剪贴板 / 撤销
| 配置项 | 类型 | 作用 | 示例 |
|---|
clipboard | string | 共享系统剪贴板 | vim.opt.clipboard = "unnamedplus"(必配) |
undofile | boolean | 持久化撤销(关闭文件后仍可撤销) | vim.opt.undofile = true |
undodir | string | 撤销文件存储目录 | vim.opt.undodir = vim.fn.stdpath("data") .. "/undo//" |
undolevels | number | 最大撤销步数 | vim.opt.undolevels = 10000 |
swapfile | boolean | 生成交换文件(崩溃恢复) | vim.opt.swapfile = false(避免多余文件,推荐用 undofile) |
- 自动保存 / 备份
| 配置项 | 类型 | 作用 | 示例 |
|---|
autowrite | boolean | 切换窗口 / 缓冲区时自动保存 | vim.opt.autowrite = true |
backup | boolean | 保存时生成备份文件 | vim.opt.backup = false |
writebackup | boolean | 写入时生成临时备份(避免文件损坏) | vim.opt.writebackup = false |
性能 / 兼容性类(优化启动 / 运行速度)
1. 性能相关
| 配置项 | 类型 | 作用 | 示例 |
|---|
updatetime | number | 自动保存 / 光标悬停 / 诊断的延迟(毫秒) | vim.opt.updatetime = 300(LSP 推荐值,越小响应越快) |
lazyredraw | boolean | 执行宏 / 脚本时延迟重绘 | vim.opt.lazyredraw = true(提升宏执行速度) |
redrawtime | number | 最大重绘时间(毫秒) | vim.opt.redrawtime = 10000 |
timeoutlen | number | 快捷键组合的超时时间(毫秒) | vim.opt.timeoutlen = 500(Leader 键推荐值) |
ttimeoutlen | number | 按键码超时时间(毫秒) | vim.opt.ttimeoutlen = 10 |
- 兼容性
| 配置项 | 类型 | 作用 | 示例 |
|---|
compatible | boolean | 兼容 Vi 模式(禁用!) | vim.opt.compatible = false(必配,启用 Neovim 增强功能) |
fileformats | table/string | 支持的换行符格式 | vim.opt.fileformats = { "unix", "dos", "mac" } |
encoding | string | 字符编码 | vim.opt.encoding = "utf-8"(默认,无需修改) |
fileencoding | string | 文件保存编码 | vim.opt.fileencoding = "utf-8" |
全局变量类(vim.g,插件 / 脚本常用)
vim.g 用于设置全局变量(支持 Lua/Vimscript 共享),主要分两类:
1. Neovim 原生全局变量
| 变量名 | 作用 | 示例 |
|---|
mapleader | 设置 Leader 键 | vim.g.mapleader = " "(必配) |
maplocalleader | 设置局部 Leader 键 | vim.g.maplocalleader = "\" |
loaded_netrw | 禁用原生文件浏览器 | vim.g.loaded_netrw = 1(配合 nvim-tree) |
loaded_netrwPlugin | 禁用 netrw 插件 | vim.g.loaded_netrwPlugin = 1 |
python3_host_prog | 指定 Python3 解释器路径 | vim.g.python3_host_prog = "/usr/bin/python3" |
- 插件全局变量
| 变量名 | 作用 | 示例 |
|---|
barbar_auto_setup | 禁用 barbar 自动初始化 | vim.g.barbar_auto_setup = false |
markdown_syntax_conceal | Markdown 语法折叠 | vim.g.markdown_syntax_conceal = 0 |
gitgutter_sign_added | GitGutter 新增行图标 | vim.g.gitgutter_sign_added = "│" |
常用配置组合(开箱即用)
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true
vim.opt.signcolumn = "yes"
vim.opt.wrap = false
vim.opt.list = true
vim.opt.listchars = { tab = "→ ", trail = "-", space = "·" }
vim.opt.expandtab = true
vim.opt.tabstop = 2
vim.opt.softtabstop = 2
vim.opt.shiftwidth = 2
vim.opt.smartindent = true
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.hlsearch = true
vim.opt.incsearch = true
vim.opt.clipboard = "unnamedplus"
vim.opt.undofile = true
vim.opt.undodir = vim.fn.stdpath("data") .. "/undo//"
vim.opt.updatetime = 300
vim.opt.splitright = true
vim.opt.splitbelow = true
vim.opt.timeoutlen = 500
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.g.mapleader = " "