nvim从零单排(二)

5 阅读5分钟

和过去好好的说一次『再见』


Tips:不是再也不见,是再见面可以很好的说声『你好』:IDE

飞机中的战斗机

众所周知原生的vim已经很强大了,而nvim又很友好的继承了这些优点,核心特点包括:

  • 多模式操作‌:分为命令模式、插入模式和底线命令模式,通过键盘快捷键实现高效编辑,减少鼠标依赖。
  • 跨平台支持‌:可在 Unix、Linux、macOS 和 Windows 等多种操作系统上运行。
  • 高度可定制与扩展‌:支持通过 Vim 脚本(Vimscript)和海量插件(如 NERDTree、vim-multiple-cursors 等)自定义功能和界面。
  • 丰富的编辑命令‌:提供强大的文本移动、搜索替换、宏录制和多寄存器剪贴板等功能,提升编辑效率。

道之所在

了解了其强大之所在,我们肯定想知道如何让其更智能更人性化一点,有些概念一时不懂没关系,往下看着看着就懂了,下面我们就开始一一介绍: Neovim 的 API 主要分两类:

  1. Lua 原生 APIvim.* 命名空间(推荐,高性能、易使用);
  2. Vimscript 兼容 APIvim.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. 行号 / 光标

配置项类型作用示例
numberboolean显示绝对行号vim.opt.number = true
relativenumberboolean显示相对行号(更实用)vim.opt.relativenumber = true
cursorlineboolean高亮当前行vim.opt.cursorline = true
cursorcolumnboolean高亮当前列(少用,易干扰)vim.opt.cursorcolumn = false
signcolumnstring/boolean侧边符号列(LSP / 诊断 / 断点)vim.opt.signcolumn = "yes"(始终显示,避免界面跳动)
scrolloffnumber滚动时光标上下保留的行数vim.opt.scrolloff = 15(避免光标贴顶 / 底)
sidescrolloffnumber横向滚动时光标左右保留的列数vim.opt.sidescrolloff = 10
  1. 字符 / 空格可视化
配置项类型作用示例
listboolean显示特殊字符(Tab / 空格 / 换行)vim.opt.list = true
listcharstable/string自定义特殊字符显示样式vim.opt.listchars = { tab = "→ ", trail = "-", space = "·" }
showtablinenumber显示标签栏的时机vim.opt.showtabline = 2(始终显示)、1(多标签时显示)、0(从不显示)
wrapboolean自动换行vim.opt.wrap = false(代码编辑推荐禁用)
linebreakboolean换行时不截断单词(wrap=true 时生效)vim.opt.linebreak = true
  1. 窗口 / 分屏
配置项类型作用示例
splitrightboolean垂直分屏时新窗口在右侧vim.opt.splitright = true
splitbelowboolean水平分屏时新窗口在下方vim.opt.splitbelow = true
winwidth/winheightnumber窗口默认宽 / 高vim.opt.winwidth = 80
equalalwaysboolean分屏后自动均分窗口大小vim.opt.equalalways = false(避免手动调整后被重置)

编辑行为类(核心,影响编码体验)

1. 缩进 / 制表符(重中之重)

配置项类型作用示例
expandtabbooleanTab 键转换为空格vim.opt.expandtab = true(代码编辑推荐)
tabstopnumberTab 键对应的空格数(显示用)vim.opt.tabstop = 2
softtabstopnumber编辑时 Tab / 退格对应的空格数vim.opt.softtabstop = 2
shiftwidthnumber自动缩进 />>/<< 对应的空格数vim.opt.shiftwidth = 2
smartindentboolean智能缩进(基础版,推荐 Treesitter 缩进)vim.opt.smartindent = true
autoindentboolean新行继承上一行缩进vim.opt.autoindent = true
cindentbooleanC 语言风格缩进(适合编程)vim.opt.cindent = true
  1. 搜索 / 替换
配置项类型作用示例
ignorecaseboolean搜索时忽略大小写vim.opt.ignorecase = true
smartcaseboolean搜索词含大写时区分大小写(需 ignorecase=true)vim.opt.smartcase = true
hlsearchboolean高亮搜索结果vim.opt.hlsearch = true
incsearchboolean实时搜索(输入时预览结果)vim.opt.incsearch = true
inccommandstring实时预览替换效果vim.opt.inccommand = "split"(分屏预览替换)
  1. 剪贴板 / 撤销
配置项类型作用示例
clipboardstring共享系统剪贴板vim.opt.clipboard = "unnamedplus"(必配)
undofileboolean持久化撤销(关闭文件后仍可撤销)vim.opt.undofile = true
undodirstring撤销文件存储目录vim.opt.undodir = vim.fn.stdpath("data") .. "/undo//"
undolevelsnumber最大撤销步数vim.opt.undolevels = 10000
swapfileboolean生成交换文件(崩溃恢复)vim.opt.swapfile = false(避免多余文件,推荐用 undofile)
  1. 自动保存 / 备份
配置项类型作用示例
autowriteboolean切换窗口 / 缓冲区时自动保存vim.opt.autowrite = true
backupboolean保存时生成备份文件vim.opt.backup = false
writebackupboolean写入时生成临时备份(避免文件损坏)vim.opt.writebackup = false

性能 / 兼容性类(优化启动 / 运行速度)

1. 性能相关

配置项类型作用示例
updatetimenumber自动保存 / 光标悬停 / 诊断的延迟(毫秒)vim.opt.updatetime = 300(LSP 推荐值,越小响应越快)
lazyredrawboolean执行宏 / 脚本时延迟重绘vim.opt.lazyredraw = true(提升宏执行速度)
redrawtimenumber最大重绘时间(毫秒)vim.opt.redrawtime = 10000
timeoutlennumber快捷键组合的超时时间(毫秒)vim.opt.timeoutlen = 500(Leader 键推荐值)
ttimeoutlennumber按键码超时时间(毫秒)vim.opt.ttimeoutlen = 10
  1. 兼容性
配置项类型作用示例
compatibleboolean兼容 Vi 模式(禁用!)vim.opt.compatible = false(必配,启用 Neovim 增强功能)
fileformatstable/string支持的换行符格式vim.opt.fileformats = { "unix", "dos", "mac" }
encodingstring字符编码vim.opt.encoding = "utf-8"(默认,无需修改)
fileencodingstring文件保存编码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"
  1. 插件全局变量
变量名作用示例
barbar_auto_setup禁用 barbar 自动初始化vim.g.barbar_auto_setup = false
markdown_syntax_concealMarkdown 语法折叠vim.g.markdown_syntax_conceal = 0
gitgutter_sign_addedGitGutter 新增行图标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 = "·" }

-- 缩进配置(2空格通用)
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 = " "