1. 先区分模式和对象
跳转到“1. 先区分模式和对象”普通模式把按键解释为命令;插入模式输入文字;可视模式选择范围;冒号进入 Ex 命令行。下表中的 Ctrl-X 表示按住 Ctrl 再按 X;连续写出的 gg、diw 则按顺序输入。
文件是磁盘上的数据,缓冲区是编辑中的文本,窗口是缓冲区的一种视图,标签页包含窗口布局。同一个缓冲区可以同时出现在多个窗口里。
| 目标 | 常用操作 |
|---|---|
| 进入插入 | i 光标前,a 光标后,I 首个非空白前,A 行尾 |
| 新起一行 | o 下方,O 上方,然后进入插入模式 |
| 返回普通模式 | Esc |
| 选择 | v 按字符,V 按行,Ctrl-V 按矩形块 |
| 查看内置帮助 | :help,或 :help 命令/选项 |
2. 位置、范围与操作符
跳转到“2. 位置、范围与操作符”可以把很多编辑动作理解为 次数 + 操作符 + 移动/文本对象。例如 d 是删除操作符,w 是到下一个词的移动,iw 是词内部文本对象:dw 与 diw 的范围不一定相同。
| 类别 | 命令 | 含义 |
|---|---|---|
| 单字符移动 | h j k l | 左、下、上、右 |
| 行内位置 | 0、^、$ | 行首、首个非空白、行尾 |
| 文件位置 | gg、G、42G | 首行、末行、第 42 行 |
| 屏幕滚动 | Ctrl-U/D、Ctrl-B/F | 半屏上/下、整屏上/下 |
| 字符删除 | x、X、3x | 光标处、光标前、从光标处起 3 个字符 |
| 行删除 | dd、3dd | 当前行、从当前行起 3 行 |
| 范围删除 | d$、d0、diw | 到行尾、到行首、词内部 |
| 范围复制 | yy、y$、yiw | 当前行、到行尾、当前词内部 |
| 粘贴 | p、P | 字符型在光标后/前,行型在当前行下/上 |
| 改写 | cw、ciw、cc | 改写相应范围并进入插入模式 |
dn 不是“删除 n 个字符”的模板:其中小写 n 是搜索移动命令。次数应使用实际数字,如 3x、3dd。命令行 :10,20delete 删除第 10~20 行。编辑命令
3. 撤销文本与恢复文件
跳转到“3. 撤销文本与恢复文件”普通模式 u 撤销编辑,Ctrl-R 重做;它们作用于缓冲区的撤销历史。误删的文本若仍在撤销历史中可恢复,但磁盘文件被文件管理器或插件删除后,不能保证按 u 能找回文件,应查回收站、版本控制或备份。
:earlier 5m 可在现有撤销历史中回到约 5 分钟前;先检查内容再保存。跨会话撤销依赖持久撤销配置和对应文件,不等于完整备份。撤销与历史
4. 搜索、替换与缩进
跳转到“4. 搜索、替换与缩进”| 操作 | 示例 |
|---|---|
| 向前/向后搜索 | /pattern、?pattern |
| 重复搜索 | n 按原方向,N 反方向 |
| 全文件替换并逐项确认 | :%s/old/new/gc |
| 仅选定行替换 | :10,20s/old/new/g |
| 当前行缩进/反缩进 | >>、<< |
| 按当前缩进规则整理一行 | == |
| 按当前规则整理整个缓冲区 | gg=G |
| 整理花括号内部/含括号范围 | =i{、=a{ |
替换中的搜索部分是模式,不总是普通字符串;g 处理一行里的全部匹配,c 逐项确认。自动缩进结果取决于文件类型、缩进表达式和配置;它不是通用语法检查或代码修复器。
5. 保存、窗口和缓冲区
跳转到“5. 保存、窗口和缓冲区”| 命令 | 实际作用 |
|---|---|
:w | 保存当前缓冲区 |
:q | 退出当前窗口;最后窗口退出编辑器,未保存修改可能阻止退出 |
:close | 关闭当前窗口,不能关闭最后一个普通窗口 |
:split / :vsplit | 水平/垂直分屏 |
Ctrl-W h/j/k/l | 到左/下/上/右窗口 |
Ctrl-W w | 在窗口间切换 |
:only | 保留当前窗口,关闭其他窗口,未保存修改可能阻止操作 |
:tabnew | 新建标签页 |
:buffers / :ls | 查看缓冲区列表 |
:buffer 3 | 切换到编号为 3 的缓冲区 |
:bdelete | 从列表移除并卸载缓冲区;不会删除磁盘文件 |
:edit path | 打开文件 |
:read path | 把文件内容插入当前缓冲区 |
:cd path / :pwd | 改变/查看当前工作目录 |
普通模式 q 用于宏录制,不是退出窗口;qa 开始把按键录入寄存器 a,之后按 q 停止,@a 执行,@@ 重复最近宏。退出是带冒号的 :q。窗口与缓冲区
6. 寄存器与系统剪贴板
跳转到“6. 寄存器与系统剪贴板”| 操作 | 示例 |
|---|---|
| 复制当前行到寄存器 a | "ayy |
| 从寄存器 a 粘贴 | "ap |
| 复制当前行到系统剪贴板 | "+yy |
| 从系统剪贴板粘贴 | "+p |
| 查看寄存器内容 | :registers |
+、* 的行为依赖平台和剪贴板提供程序,终端鼠标选择也受终端设置影响。不能把 :let @a = "+" 当成粘贴命令:那只是把一个加号字符串写入寄存器 a。无法使用系统剪贴板时,先查看 :help clipboard;Neovim 可运行 :checkhealth 检查提供程序。
7. 编码、字体与可修改性
跳转到“7. 编码、字体与可修改性”文件编码、编辑器内部编码、终端编码是不同层。先查 :setlocal fileencoding?、:set encoding?;读取错误编码时可按已知源编码重新打开,如 :edit ++enc=gb18030 文件名,会涉及当前缓冲区未保存内容,先处理修改。另存为 UTF-8 可明确设置 :setlocal fileencoding=utf-8 后保存。
Neovim 内部使用 UTF-8,不照搬旧 Vim 的 termencoding 设置。字体由终端或 GUI 前端控制,guifont 也依赖具体前端支持。
modifiable 控制当前缓冲区能否修改;readonly 控制普通写文件操作,二者不等同。使用 :setlocal modifiable? 查看状态,必要时对普通文本缓冲区设置 :setlocal modifiable。插件的树、预览、帮助等缓冲区禁止修改通常有其原因,不要统一强制解锁。:setglobal 不会追溯修改所有已有缓冲区的局部值。选项说明
8. 配置路径与映射来源
跳转到“8. 配置路径与映射来源”Vim 用 :version 查看启动文件搜索位置;Neovim 用 :echo stdpath('config') 查看配置目录。nvim -u 路径 可显式使用指定配置,不需要把他人的绝对路径写死到启动脚本中。
:verbose nmap <leader>ff:verbose imap <C-Space>:verbose setlocal shiftwidth?这些命令用于核查映射或选项的实际定义位置。ff、fg、fb、fh 是某些配置的简写,不是 Vim 内置命令;先核对 leader 和插件是否安装,再参考 Neovim 配置键位表。映射说明
9. 插件使用单独记录
跳转到“9. 插件使用单独记录”| 插件 | 作用 | 核查入口 |
|---|---|---|
| vim-plug | 插件安装、更新与清理 | :PlugStatus,配置中的 plug#begin() / Plug / plug#end() |
| Telescope | 文件、文本、缓冲区等选择器 | :Telescope find_files、:Telescope live_grep,以及插件帮助 |
| nvim-tree | 文件树视图 | 进入树缓冲区,用 g? 查看当前帮助 |
vim-plug 的 :PlugInstall 安装配置中的插件,:PlugUpdate 更新,:PlugDiff 看更新差异,:PlugClean 清理配置中已移除的插件,:PlugUpgrade 更新管理器自身。插件命令仅在相应管理器已经加载时存在。
Telescope 和 nvim-tree 的键位可被配置覆盖。旧稿混合了动作名、按键及不同版本的含义;详细历史配置统一放入上面的键位表,不再在基础命令页复制第二份。相关文档:vim-plug、Telescope、nvim-tree。