# Vim 编辑器详细使用手册
## 目录
1. [Vim 简介](#1-vim-简介)
2. [三种模式](#2-三种模式)
3. [基本操作](#3-基本操作)
4. [移动与跳转](#4-移动与跳转)
5. [编辑操作](#5-编辑操作)
6. [搜索与替换](#6-搜索与替换)
7. [多文件操作](#7-多文件操作)
8. [多窗口操作](#8-多窗口操作)
9. [寄存器与宏](#9-寄存器与宏)
10. [折叠与标记](#10-折叠与标记)
11. [配置与个性化](#11-配置与个性化)
12. [实用技巧](#12-实用技巧)
—
## 1. Vim 简介
Vim(Vi IMproved)是从 Vi 发展而来的文本编辑器,以其高效的键盘操作和强大的定制能力著称。Linux 系统默认预装。
### 启动方式
“`bash
vim filename # 打开或新建文件
vim +10 filename # 打开文件并跳转到第10行
vim + filename # 打开文件跳转到最后一行
vim -R filename # 只读模式打开
vim -d file1 file2 # 比较模式打开两个文件
vim -b filename # 以二进制模式打开
“`
### 退出方式
| 命令 | 说明 |
|——|——|
| `:q` | 退出(无修改时) |
| `:q!` | 强制退出(放弃修改) |
| `:wq` | 保存并退出 |
| `:x` | 保存并退出(仅在有修改时写入) |
| `ZZ` | 保存并退出(Normal 模式下) |
| `:wqa` | 保存并退出所有窗口 |
| `:qa!` | 强制退出所有窗口 |
—
## 2. 三种模式
Vim 有三种主要模式,理解模式切换是掌握 Vim 的核心。
“`
┌───────────────┐
│ Insert Mode │
│ (插入模式) │
│ i/a/o 等进入 │
└───────┬───────┘
│ <ESC>
▼
┌───────────────┐ ┌────────────────┐ ┌───────────────┐
│ Normal Mode │◄──►│ Command Mode │───►│ Visual Mode │
│ (普通模式) │ :/? │ (命令模式) │ │ (可视模式) │
│ 一切命令的起点 │ │ 以 : / ? 进入 │ │ v/V/Ctrl+v │
└───────────────┘ └───────┬────────┘ └───────────────┘
│ <ESC>
▼
“`
### 模式说明
– **Normal 模式**:默认模式,所有快捷键生效,用于导航和操作
– **Insert 模式**:输入文字,类似普通编辑器
– **Command 模式**:执行命令,以 `:` 开头
– **Visual 模式**:选择文本区域
### 进入插入模式的方式
| 命令 | 光标行为 |
|——|———|
| `i` | 在当前字符前插入 |
| `a` | 在当前字符后插入 |
| `I` | 在行首插入 |
| `A` | 在行尾插入 |
| `o` | 在下方新建一行 |
| `O` | 在上方新建一行 |
| `s` | 删除当前字符并进入插入模式 |
| `S` | 删除整行并进入插入模式 |
| `c<motion>` | 配合动作命令使用 |
| `gi` | 在上次退出插入模式的位置继续 |
—
## 3. 基本操作
### 光标移动(Normal 模式)
| 命令 | 移动方向 |
|——|———|
| `h` | 左 |
| `j` | 下 |
| `k` | 上 |
| `l` | 右 |
| `w` | 下一个单词词首 |
| `b` | 上一个单词词首 |
| `e` | 下一个单词词尾 |
| `ge` | 上一个单词词尾 |
| `0` | 行首 |
| `^` | 行首(非空白字符) |
| `$` | 行尾 |
| `{` | 上一段 |
| `}` | 下一段 |
| `gg` | 文件首行 |
| `G` | 文件末行 |
| `nG` 或 `:n` | 跳转到第 n 行 |
| `%` | 匹配括号跳转 |
### 文本操作
| 命令 | 操作 |
|——|——|
| `x` | 删除当前字符 |
| `dd` | 删除当前行 |
| `dw` | 删除到词尾 |
| `d$` | 删除到行尾 |
| `d0` | 删除到行首 |
| `dgg` | 删除到文件开头 |
| `dG` | 删除到文件末尾 |
| `yy` 或 `Y` | 复制当前行 |
| `yw` | 复制到词尾 |
| `p` | 在光标后粘贴 |
| `P` | 在光标前粘贴 |
| `u` | 撤销 |
| `Ctrl+r` | 重做 |
| `.` | 重复上一次操作 |
| `~` | 大小写切换 |
| `r` | 替换单个字符 |
| `R` | 进入替换模式 |
### 数字参数
Vim 大部分命令都可以加数字前缀表示重复次数:
“`vim
” 删除接下来的5行
5dd
” 向下移动10行
10j
” 复制接下来的3行
3yy
” 在当前位置插入5个减号
5i-<ESC>
“`
—
## 4. 移动与跳转
### 屏幕内移动
| 命令 | 说明 |
|——|——|
| `H` | 屏幕顶部(High) |
| `M` | 屏幕中部(Middle) |
| `L` | 屏幕底部(Low) |
| `zt` | 当前行移到屏幕顶部 |
| `zz` | 当前行移到屏幕中部 |
| `zb` | 当前行移到屏幕底部 |
| `Ctrl+d` | 下翻半屏(Down) |
| `Ctrl+u` | 上翻半屏(Up) |
| `Ctrl+f` | 下翻整屏(Forward) |
| `Ctrl+b` | 上翻整屏(Backward) |
| `Ctrl+e` | 屏幕向下滚动一行 |
| `Ctrl+y` | 屏幕向上滚动一行 |
### 单词与字符跳转
| 命令 | 说明 |
|——|——|
| `W` | 大写 W,忽略标点跳转词首 |
| `B` | 大写 B,忽略标点跳转词首 |
| `E` | 大写 E,忽略标点跳转词尾 |
| `f<char>` | 本行查找下一个字符 |
| `F<char>` | 本行查找上一个字符 |
| `t<char>` | 跳转到目标字符前 |
| `T<char>` | 跳转到目标字符后 |
| `;` | 重复上一次 f/F/t/T |
| `,` | 反向重复上一次 f/F/t/T |
| `|` | 跳转到行首 |
### 书签跳转
“`vim
m{a-zA-Z} ” 创建书签(小写局部,大写全局)
`{a-zA-Z} ” 跳转到书签
‘{a-z} ” 跳转到书签所在行首
:marks ” 查看所有书签
:delmarks a ” 删除书签 a
:delmarks! ” 删除所有小写书签
“`
—
## 5. 编辑操作
### 缩进
| 命令 | 说明 |
|——|——|
| `>>` | 当前行向右缩进 |
| `<<` | 当前行向左缩进 |
| `=` | 自动格式化(配合动作) |
| `==` | 格式化当前行 |
| `n>>` | n 行向右缩进 |
| `>%` | 缩进到匹配括号 |
| `=ap` | 缩进当前段落 |
| `:set expandtab` | 缩进用空格 |
| `:set tabstop=4` | 制表符宽度设为4 |
| `:set shiftwidth=4` | 自动缩进宽度设为4 |
### 复制、剪切与粘贴
| 命令 | 说明 |
|——|——|
| `yy` | 复制当前行 |
| `nyy` | 复制 n 行 |
| `yaw` | 复制当前单词(含周围空格) |
| `yas` | 复制当前句子 |
| `yap` | 复制当前段落 |
| `dd` | 剪切当前行 |
| `ndd` | 剪切 n 行 |
| `dw` | 剪切到词尾 |
| `D` | 剪切到行尾(不包含换行) |
| `daw` | 剪切当前单词(含空格) |
| `p` | 在光标后粘贴 |
| `P` | 在光标前粘贴 |
| `gp` | 粘贴后光标移动到粘贴文本后 |
| `”]p` | 在缩进正确的位置粘贴 |
### 组合操作(操作符 + 动作)
Vim 的编辑命令遵循 **操作符 + 动作** 模式:
“`
操作符:
d – 删除 (delete)
y – 复制 (yank)
c – 修改 (change)
g~ – 大小写切换
gu – 转为小写
gU – 转为大写
> – 右缩进
< – 左缩进
= – 自动缩进
动作:
w – 下一个单词
$ – 到行尾
0 – 到行首
} – 下一段
i} – 括号内
a” – 引号内(含引号)
…
“`
示例:
“`vim
ci” ” 修改引号内的内容
ci( ” 修改括号内的内容
diw ” 删除当前单词
yaw ” 复制当前单词
gU$ ” 当前行光标后转为大写
gUU ” 整行转为大写
guu ” 整行转为小写
“`
—
## 6. 搜索与替换
### 搜索
| 命令 | 说明 |
|——|——|
| `/pattern` | 向下搜索 pattern |
| `?pattern` | 向上搜索 pattern |
| `n` | 跳转到下一个匹配 |
| `N` | 跳转到上一个匹配 |
| `*` | 搜索光标下单词(向下) |
| `#` | 搜索光标下单词(向上) |
| `g*` | 同 * 但允许部分匹配 |
| `g#` | 同 # 但允许部分匹配 |
| `:noh` | 取消高亮搜索 |
| `/\cpattern` | 忽略大小写搜索 |
| `/\Cpattern` | 强制大小写敏感 |
| `/\<word\>` | 精确匹配单词 |
### 正则搜索
“`vim
/\d\+ ” 匹配一个或多个数字
/\w\+ ” 匹配一个或多个字母数字下划线
/\s\+ ” 匹配一个或多个空白字符
/\t\+ ” 匹配一个或多个制表符
/\.\+ ” 匹配点号本身(需转义)
/^begin ” 以 begin 开头的行
/end$ ” 以 end 结尾的行
/^$ ” 空行
/\n ” 换行符
/[a-zA-Z] ” 任意字母
/[^a-z] ” 非小写字母
“`
### 替换
**基本语法:**
“`vim
:[range]s/{pattern}/{string}/[flags]
“`
**范围说明:**
| 范围 | 说明 |
|——|——|
| 无 | 仅当前行 |
| `%` | 整个文件 |
| `n,m` | 第 n 到 m 行 |
| `.,$` | 当前行到文件末尾 |
| `'<,’>` | 可视模式选中的区域 |
| `.+1` | 当前行下一行 |
| `?^if?+1,$` | 从上一次 “if” 的下一行到文件末尾 |
**替换标志:**
| 标志 | 说明 |
|——|——|
| `g` | 全局替换(global) |
| `c` | 逐个确认(confirm) |
| `i` | 忽略大小写 |
| `I` | 大小写敏感 |
| `n` | 只报告匹配数量 |
**常用示例:**
“`vim
:s/foo/bar/ ” 当前行第一个 foo 替换为 bar
:s/foo/bar/g ” 当前行所有 foo 替换为 bar
:%s/foo/bar/g ” 全文件替换
:%s/foo/bar/gc ” 全文件替换,逐个确认
:%s/\s\+$// ” 删除行尾空白
:%s/^\s\+// ” 删除行首空白
:%s/foo/bar/gI ” 大小写敏感替换
:%s/\\/\\\\/g ” 反斜杠转义(替换 \ 为 \\)
:'<,’>s/old/new/g ” 可视模式下替换选中区域
:%s/”/’/g ” 双引号替换为单引号
:%s/\/\/.*//g ” 删除所有 // 注释
“`
**确认替换时的选项:**
“`
y – 替换当前
n – 跳过当前
a – 全部替换
q – 退出替换
l – 替换当前后退出
Ctrl+e – 向上滚动
Ctrl+y – 向下滚动
“`
—
## 7. 多文件操作
### 缓冲区
| 命令 | 说明 |
|——|——|
| `:e filename` | 打开文件 |
| `:e .` | 在文件浏览器打开当前目录 |
| `:bn` | 下一个缓冲区 |
| `:bp` | 上一个缓冲区 |
| `:b n` | 切换到第 n 个缓冲区 |
| `:bfirst` | 切换到第一个缓冲区 |
| `:blast` | 切换到最后一个缓冲区 |
| `:bd` | 删除当前缓冲区 |
| `:bd n` | 删除第 n 个缓冲区 |
| `:ls` 或 `:buffers` | 列出所有缓冲区 |
| `:bn!` | 强制切换(放弃修改) |
| `:e #` | 切换到上一个文件 |
| `Ctrl+^` | 切换到上一个文件 |
### 参数列表
| 命令 | 说明 |
|——|——|
| `:args` | 显示参数列表 |
| `:args *.c` | 将所有 .c 文件加入参数列表 |
| `:next` 或 `:n` | 下一个文件 |
| `:prev` 或 `:N` | 上一个文件 |
| `:argdo {cmd}` | 对参数列表所有文件执行命令 |
—
## 8. 多窗口操作
### 窗口分割
| 命令 | 说明 |
|——|——|
| `:sp` 或 `:split` | 水平分割窗口 |
| `:vsp` 或 `:vsplit` | 垂直分割窗口 |
| `:sp filename` | 分割并打开文件 |
| `:vsp filename` | 垂直分割并打开文件 |
| `Ctrl+w s` | 水平分割(当前文件) |
| `Ctrl+w v` | 垂直分割(当前文件) |
| `:new` | 新建空白水平窗口 |
| `:vnew` | 新建空白垂直窗口 |
| `Ctrl+w n` | 新建空白窗口 |
| `Ctrl+w T` | 将当前窗口移到新标签页 |
### 窗口导航
| 命令 | 说明 |
|——|——|
| `Ctrl+w h` | 移动到左侧窗口 |
| `Ctrl+w l` | 移动到右侧窗口 |
| `Ctrl+w j` | 移动到下方窗口 |
| `Ctrl+w k` | 移动到上方窗口 |
| `Ctrl+w t` | 移动到顶部窗口 |
| `Ctrl+w b` | 移动到底部窗口 |
| `Ctrl+w p` | 移动到上一个活跃窗口 |
| `Ctrl+w w` | 循环切换窗口 |
### 窗口调整
| 命令 | 说明 |
|——|——|
| `Ctrl+w =` | 所有窗口等宽等高 |
| `Ctrl+w _` | 当前窗口最大化高度 |
| `Ctrl+w |` | 当前窗口最大化宽度 |
| `n Ctrl+w _` | 设置当前窗口高度为 n 行 |
| `n Ctrl+w |` | 设置当前窗口宽度为 n 列 |
| `Ctrl+w >` | 窗口宽度 +5 |
| `Ctrl+w <` | 窗口宽度 -5 |
| `Ctrl+w +` | 窗口高度 +5 |
| `Ctrl+w -` | 窗口高度 -5 |
| `:res +n` | 高度增加 n 行 |
| `:vertical res +n` | 宽度增加 n 列 |
### 窗口关闭
| 命令 | 说明 |
|——|——|
| `:q` 或 `Ctrl+w q` | 关闭窗口 |
| `:only` 或 `Ctrl+w o` | 仅保留当前窗口 |
| `:hide` | 隐藏当前窗口 |
| `:qa` | 关闭所有窗口退出 |
| `:wa` | 保存所有窗口 |
### 标签页
| 命令 | 说明 |
|——|——|
| `:tabnew` 或 `:tabe` | 新建标签页 |
| `:tabnew filename` | 新建标签页并打开文件 |
| `:tabf filename` | 在新标签页打开文件 |
| `gt` 或 `:tabnext` | 切换到下一个标签页 |
| `gT` 或 `:tabprevious` | 切换到上一个标签页 |
| `n gt` | 切换到第 n 个标签页 |
| `:tabfirst` | 切换到第一个标签页 |
| `:tablast` | 切换到最后一个标签页 |
| `:tabdo {cmd}` | 对所有标签页执行命令 |
| `:tab split` | 在新标签页打开当前文件 |
| `:tabclose` | 关闭当前标签页 |
| `:tabonly` | 仅保留当前标签页 |
| `:tabmove n` | 移动标签页到第 n 位 |
| `:tabs` | 列出所有标签页 |
—
## 9. 寄存器与宏
### 寄存器
Vim 使用多个寄存器存储不同类型的数据:
| 寄存器 | 说明 |
|——–|——|
| `”` | 默认寄存器(复制/删除) |
| `0` | 复制专用寄存器(y) |
| `1-9` | 删除历史寄存器(数字越小越近) |
| `a-z` | 命名寄存器(手动指定) |
| `A-Z` | 追加到 a-z 对应小写寄存器 |
| `-` | 小删除寄存器(小于一行的删除) |
| `+` | 系统剪贴板(Linux) |
| `*` | 系统剪贴板(Linux 下同 +) |
| `_` | 黑洞寄存器(删除但不进入寄存器) |
| `=` | 表达式寄存器 |
| `/` | 搜索模式寄存器 |
| `:` | 上一次命令寄存器 |
| `.` | 上一次插入的文本 |
| `%` | 当前文件名 |
| `#` | 备用文件名 |
**寄存器使用:**
“`vim
“ayy ” 复制当前行到寄存器 a
“ap ” 从寄存器 a 粘贴
“bdd ” 删除当前行到寄存器 b
“bP ” 在上方粘贴寄存器 b
:reg a ” 查看寄存器 a 的内容
:reg ” 查看所有寄存器内容
“+y ” 复制到系统剪贴板
“+p ” 从系统剪贴板粘贴
“`
### 宏
**录制宏:**
“`vim
q{a-z} ” 开始录制到寄存器 a-z
{q} ” 停止录制
” 录制示例:给行首添加行号
0 ” 跳到行首
i ” 进入插入模式
1. <ESC> ” 输入 “1. ” 然后退出
q ” 停止录制
@a ” 执行寄存器 a 中的宏
5@a ” 执行 5 次
@@ ” 重复上一次宏
“`
**宏的高级用法:**
“`vim
qaI// <ESC>q ” 录制:行首插入 //
qa0i/* <ESC>A */<ESC>q ” 录制:行注释格式化
qa0f;i <ESC>q ” 录制:查找分号并在其后加空格
“`
—
## 10. 折叠与标记
### 折叠方式
“`vim
:set foldmethod=manual ” 手动折叠
:set foldmethod=marker ” 以标记折叠({{{ }}})
:set foldmethod=syntax ” 基于语法折叠
:set foldmethod=indent ” 基于缩进折叠
:set foldmethod=expr ” 基于表达式折叠
:set foldmethod=diff ” diff 模式折叠
“`
### 折叠操作
| 命令 | 说明 |
|——|——|
| `zf` | 创建折叠(配合动作) |
| `zF` | 创建折叠(整行) |
| `zd` | 删除当前折叠 |
| `zD` | 递归删除折叠 |
| `zE` | 删除所有折叠 |
| `zo` | 打开当前折叠 |
| `zO` | 递归打开折叠 |
| `zc` | 关闭当前折叠 |
| `zC` | 递归关闭折叠 |
| `za` | 切换折叠(开/关) |
| `zA` | 递归切换折叠 |
| `zv` | 打开足够看到光标所在行 |
| `zm` | 折叠更多(减少折叠层数) |
| `zM` | 关闭所有折叠 |
| `zr` | 打开更多(增加折叠层数) |
| `zR` | 打开所有折叠 |
| `zx` | 更新折叠并打开当前行折叠 |
| `zX` | 重新应用折叠状态 |
**折叠快捷键示例:**
“`vim
zfj} ” 折叠到下一个空行
zf% ” 折叠匹配括号区域
zf’a ” 从当前位置折叠到书签 a
zfa” ” 折叠引号内的内容
“`
### 可视模式下的标记
| 命令 | 说明 |
|——|——|
| `:` | 选中区域自动变为 `:'<,’>` |
| `gv` | 重新选中上一次选中的区域 |
| `o` | 选中区域对角跳转 |
| `O` | 选中区域另一端跳转 |
—
## 11. 配置与个性化
### .vimrc 配置文件
Vim 的配置文件位于用户主目录下:
– Linux/Mac: `~/.vimrc`
– Windows: `$HOME/_vimrc`
**常用配置项:**
“`vim
” === 基础设置 ===
set number ” 显示行号
set relativenumber ” 显示相对行号
set cursorline ” 高亮当前行
set cursorcolumn ” 高亮当前列
set wrap ” 自动换行
set linebreak ” 英文单词断行
set showcmd ” 显示命令
set showmode ” 显示模式
set showmatch ” 高亮匹配括号
set wildmenu ” 命令补全菜单
set wildmode=longest:full ” 补全模式
set scrolloff=5 ” 上下保留行数
set sidescrolloff=8 ” 左右滚动偏移
” === 缩进设置 ===
set tabstop=4 ” 制表符宽度
set softtabstop=4 ” 软制表符宽度
set shiftwidth=4 ” 自动缩进宽度
set expandtab ” 用空格代替制表符
set autoindent ” 自动缩进
set smartindent ” 智能缩进
” === 搜索设置 ===
set incsearch ” 增量搜索
set hlsearch ” 高亮搜索结果
set ignorecase ” 忽略大小写
set smartcase ” 含大写时大小写敏感
set nowrapscan ” 搜索到文件末尾停止
” === 配色与外观 ===
syntax on ” 语法高亮
set background=dark ” 深色背景配色
set termguicolors ” True Color 支持
set laststatus=2 ” 总是显示状态栏
set ruler ” 显示光标位置
set fillchars=vert:\ ” 垂直分割线样式
” === 文件设置 ===
set encoding=utf-8 ” 编码
set fileencoding=utf-8 ” 文件编码
set autoread ” 文件外部修改时自动读取
set hidden ” 允许切换未保存文件
set backup ” 生成备份文件
set writebackup ” 保存前先备份
set undofile ” 持久化撤销历史
set undodir=~/.vim/undo ” 撤销文件目录
” === 快捷键 ===
let mapleader = “,” ” 定义 leader 键
nnoremap <leader>w :w<CR> ” 快速保存
nnoremap <leader>s :source ~/.vimrc<CR> ” 重载配置
“`
### 常用插件管理
**手动安装插件结构:**
“`
~/.vim/
├── plugin/ # 插件文件
├── autoload/ # 自动加载
├── colors/ # 配色方案
└── ftplugin/ # 文件类型插件
“`
**使用插件管理器(如 vim-plug):**
“`bash
curl -fLo ~/.vim/autoload/plug.vim –create-dirs \
“`
“`vim
” 在 .vimrc 中添加
call plug#begin(‘~/.vim/plugged’)
Plug ‘tpope/vim-sensible’ ” 基础配置
Plug ‘scrooloose/nerdtree’ ” 文件树
Plug ‘ctrlpvim/ctrlp.vim’ ” 文件搜索
Plug ‘vim-airline/vim-airline’ ” 状态栏
Plug ‘vim-airline/vim-airline-themes’ ” 状态栏主题
Plug ‘itchyny/lightline.vim’ ” 轻量状态栏
call plug#end()
“`
“`vim
:PlugInstall ” 安装插件
:PlugUpdate ” 更新插件
:PlugClean ” 清理未使用的插件
:PlugUpgrade ” 升级 vim-plug 本身
“`
### 常用插件推荐
| 插件 | 功能 |
|——|——|
| `nerdtree` | 文件浏览器树 |
| `ctrlp.vim` | 全局文件搜索 |
| `vim-fugitive` | Git 集成 |
| `vim-surround` | 环绕操作(快速添加/删除引号括号) |
| `vim-commentary` | 快速注释/取消注释 |
| `ack.vim` | 代码搜索 |
| `vim-go` | Go 语言支持 |
| `YouCompleteMe` | 代码补全 |
| `ALE` | 语法检查 |
| `lightline.vim` | 轻量状态栏 |
| `vim-startify` | 启动画面 |
| `vim-slash` | 搜索增强 |
| `vim-visual-multi` | 多光标编辑 |
| `fzf.vim` | 模糊搜索 |
### 常用键映射
“`vim
” 快速保存和退出
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>x :wq<CR>
” 窗口快速跳转
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
” 快速打开 .vimrc
nnoremap <leader>ev :vsplit $MYVIMRC<CR>
nnoremap <leader>sv :source $MYVIMRC<CR>
” 快速清除搜索高亮
nnoremap <leader>/ :noh<CR>
” 在当前文件目录打开终端
nnoremap <leader>te :terminal .<CR>
” 快速在当前位置打开文件
nnoremap <leader>e :edit <C-R>=expand(‘%:h’).’/'<CR>
“`
—
## 12. 实用技巧
### 高效编辑技巧
“`vim
” === 行操作 ===
J ” 将下一行合并到当前行(留一个空格)
gJ ” 将下一行合并(不留空格)
:join ” 同 J 但可加范围
ddp ” 交换当前行与下一行
ddkp ” 交换当前行与上一行
” === 行列互换 ===
xp ” 交换两个相邻字符
ddp ” 交换两行
Vue ” 全大写当前单词后返回 Normal
” === 大小写操作 ===
vu ” 当前单词转小写
VU ” 当前单词转大写
gUU ” 当前行转大写
guu ” 当前行转小写
g~g~w ” 切换当前单词大小写
” === 重复与计数 ===
5. ” 重复上一次操作5次
qa…q ” 录制宏并执行
{n}Ctrl+a ” 将数字加 n
{n}Ctrl+x ” 将数字减 n
” === 二进制编辑 ===
:%!xxd ” 以十六进制查看
:%!xxd -r ” 恢复文本模式
:set binary ” 二进制模式打开
” === 加密文件 ===
:X ” 设置加密密码
:set key= ” 移除加密
“`
### 命令行模式技巧
“`vim
” === 命令历史 ===
: ” 打开命令行
q: ” 从 Normal 模式打开命令历史窗口
q/ ” 从 Normal 模式打开搜索历史窗口
Ctrl+f ” 在 Normal 模式切换到命令行历史
<Up>/<Down> ” 浏览命令历史
” === 命令补全 ===
Tab ” 下一个补全
Shift+Tab ” 上一个补全
Ctrl+d ” 显示所有补全选项
Ctrl+p ” 上一个匹配
Ctrl+n ” 下一个匹配
” === 范围表达式 ===
:.= ” 当前行号
:$= ” 最后一行行号
:.+5 ” 当前行下5行
:,+3s/foo/bar/ ” 当前行到下3行
” === 执行外部命令 ===
:!ls ” 执行 ls
:!{cmd} ” 执行任意命令
:r !{cmd} ” 读取命令输出到光标后
:r! date ” 插入当前日期
:w !sudo tee % ” 以 sudo 权限保存当前文件
“`
### 插入模式快捷键
| 快捷键 | 说明 |
|——–|——|
| `Ctrl+h` | 删除前一个字符(相当于 Backspace) |
| `Ctrl+w` | 删除前一个单词 |
| `Ctrl+u` | 删除到行首 |
| `Ctrl+t` | 缩进 |
| `Ctrl+d` | 取消缩进 |
| `Ctrl+y` | 复制上一行相同位置的字符 |
| `Ctrl+e` | 复制下一行相同位置的字符 |
| `Ctrl+r {reg}` | 插入寄存器内容 |
| `Ctrl+r =5*3<CR>` | 计算 5*3=15 并插入 |
| `Ctrl+v {code}` | 插入非常见字符 |
| `Ctrl+v u0041` | 插入十六进制 0041(A) |
| `Ctrl+o` | 临时进入 Normal 模式执行一个命令 |
| `Ctrl+[` | 同 ESC |
### 特殊字符输入
“`vim
Ctrl+v 000 ” 插入 ASCII 0 (空字符)
Ctrl+v 033 ” 插入八进制 033 对应的字符
Ctrl+v x41 ” 插入十六进制 41 (字母 A)
Ctrl+v 65 ” 插入 ASCII 65 (字母 A)
Ctrl+v <CR> ” 插入换行符(显示为 ^M)
Ctrl+v <ESC> ” 插入 ESC 键(显示为 ^[)
Ctrl+v <Tab> ” 插入 Tab 字符
“`
### 视图与布局
“`vim
” === diff 模式 ===
:diffthis ” 当前窗口进入 diff
:diffsplit {file} ” 分屏并进入 diff
:diffupdate ” 重新比较
]c ” 跳到下一个差异
[c ” 跳到上一个差异
do ” 从另一侧获取差异(obtain)
dp ” 将差异推送到另一侧(put)
:diffget RE ” 获取特定缓冲区差异
:diffput RE ” 推送差异到特定缓冲区
” === 比较模式 ===
vim -d file1 file2 ” 启动时直接进入比较
vimdiff file1 file2 ” vimdiff 等同于 vim -d
” === quickfix ===
:make ” 执行编译
:copen ” 打开 quickfix 窗口
:cclose ” 关闭 quickfix 窗口
:cn ” 下一个错误
:cp ” 上一个错误
:cl ” 列出所有错误
:cc n ” 显示第 n 个错误详情
“`
### 文件类型检测
“`vim
” 在 .vimrc 中设置文件类型
:filetype on
:filetype plugin on
:filetype indent on
” 手动设置文件类型
:set ft=c
:set ft=python
:set filetype=html
” 文件类型特定配置
autocmd FileType python setlocal expandtab shiftwidth=4
autocmd FileType c setlocal noexpandtab shiftwidth=4 tabstop=8
“`
### 自定义折叠表达式
“`vim
” 基于缩进的自动折叠
set foldmethod=indent
set foldlevel=99
nnoremap <space> za ” 空格键切换折叠
” 基于标记的折叠
set foldmethod=marker
set foldmarker={{{,}}}
“`
### 持久化配置建议
“`vim
” === 持久化撤销 ===
if has(‘persistent_undo’)
set undofile
set undodir=~/.vim/undo
silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
endif
” === 持久化视图 ===
autocmd BufWinLeave * mkview
autocmd BufWinEnter * silent! loadview
” === 自动命令 ===
augroup vimrc_autocmds
autocmd!
” 保存时删除行尾空白
autocmd BufWritePre * :%s/\s\+$//
” 文件进入时去除尾随空白
autocmd BufRead * :%s/\s\+$//
” C 文件使用 UNIX 换行符
autocmd FileType c set fileformat=unix
” 保存时自动格式化
autocmd BufWritePost * vimrc source ~/.vimrc
augroup END
“`
—
## 附录:Cheat Sheet(速查表)
### 移动
“`
h j k l 上下左右
w b e 单词跳转
0 $ ^ 行首行尾
{ } 段落跳转
gg G 文件首尾
nG :n 跳转到行号
f F t T 行内字符跳转
* # 搜索当前词
/ ? 搜索
n N 搜索下一/上一
“`
### 编辑
“`
i a 进入插入
o O 新建行
x dd yy p 删除复制粘贴
u Ctrl+r 撤销重做
. 重复
r R 替换
c 修改
~ gU gu 大小写
>> << = 缩进
“`
### 导航
“`
Ctrl+w 窗口操作
:sp :vsp 分割窗口
:tab 标签页
% 括号匹配
m ‘ 书签
“ 跳转返回
Ctrl+o/i 跳转历史
“`
### 搜索替换
“`
/pattern 搜索
n N 下一上一
:s/old/new/ 替换
:&g 全局重复
:%s/.. 全文替换
:g/pattern 全局命令
“`
### 高级
“`
q: 命令历史
:! 执行命令
:make 编译
:args 参数列表
:bn :bp 缓冲区切换
. 重复操作
“寄存器 寄存器操作
qa 宏录制
“`
—
*本文档使用 Vim 编写。Happy Vimming!*