VIM 之指令键篇

1 移动

序号 快捷键 功能
1 hjkl 方向键
2 :q 退出
3 $ 至本行最后一个字符
4 5G 跳至第 5 行
5 5k/j/h/j 上/下/左/右移 5 行
6 w 向前 (正向,下同) N 个单词
7 b 向后 (反向,下同) N 个单词
8 ) 向前 N 个句子
9 } 向前 N 个段落
10 5H 窗口的顶行向下的第 5 行 (Home)
11 M 窗口的中间行 (Middle)
12 5L 窗口的底行向上的第 5 行 (Last)
13 ctrl + ] 跳转到标签
14 ctrl - o 从标签跳回
15 fx 向前移到本行的字符 x 处(F 为反向移动),; 重复前移,, 反向
16 zz 使光标所在行位于屏幕中间

2 搜索

序号 快捷键 功能
1 N/{pattern} 向前查找第 N 次出现 {pattern} 的地方
2 N?{pattern} 向后查找第 N 次出现 {pattern} 的地方
3 n 重复上次查找
4 N 相反方向重复上次查找
5 * 向前:查找光标下的标识符
6 # 向后:查找光标下的标识符

2.1 查找模式中的特殊字符

含义 magic
匹配任意单个字符 .
匹配行首 ^
匹配 $
匹配单词开始 \<
匹配单词结束 \>
匹配单个标定范围中的字符 [a-z]
匹配单个不在标定范围中的字符 [^a-z]
匹配一个标识符字符 \i
同上但不包括数字 \I
匹配一个关键字字符 \k
同上但不包括数字 \K
匹配一个文件名字符 \f
同上但不包括数字 \F
匹配一个可显示的字符 \p
同上但不包括数字 \P
匹配一个空白字符 \s
匹配一个非空白字符 \S
匹配 <Esc> \e
匹配 <Tab> \t
匹配 <CR> \r
匹配 <BS> \b
匹配 1 或多个前面的匹配原 *
匹配 2 或多个前面的匹配原 \+
匹配 1 或 1 个前面的匹配原 \=
匹配 3 至 5 个前面的匹配原 \{2,5}
隔开两种可替换的匹配 \|

3 位置标签

序号 快捷键 功能
1 m{a-zA-Z} 用标记 {a-zA-Z} 记录当前位置
2 `{a-z} 至当前文件中的标记 {a-z}
3 `` 至上次跳转之前的位置
4 `" 至上次编辑此文件的位置
5 `. 至当前文件最后被改动的位置
6 :makrs 列出活动的标记
7 :ju 列出跳转表

4 插入模式

以下的快捷键是在 insert 模式下起作用的

序号 快捷键 功能
1 ctrl-c 同 ESC
2 ctrl-h 同 Backspace, 删除前一个词
3 ctrl-y 插入光标上方的字符
4 ctrl-w 删除光标前的一个单词
5 ctrl-t 在当前行首插入一个 tab 的缩进
6 ctrl-d 从当前行首删除一个 tab 的缩进
7 :r [file] 将文件 [file] 的内容插入到光标之下
8 :r! {command} 将命令 {command} 的标准输出插入到光标之下

5 删除文本

序号 快捷键 功能
1 N x/X 删除光标之后 / 前的 N 个字符
2 {visual}d 在 visual 模式下,删除高亮的文本
3 J 删除本行的 <EOL>
4 df: 删除当前光标到本行:处的文本

6 复制与移动文本

序号 快捷键 功能
1 "{char} 在接下来的删除、抽出或放置命令中使用寄存器 {char}
2 :reg 显示所有寄存器的内容
3 :reg {num} 显示寄存器 num 的内容
4 N yy 抽出 N 行至寄存器
5 N p 将一个寄存器的内容放置在光标位置前 (N 次)
6 gp 同 p,但将光标留在新文本之后

7 改变文本

序号 快捷键 功能
1 {visual}c visual 模式下,修改高亮的文本
2 >> 向右移动 tab
3 << 向左移动 tab
4 :[range]ce[nter] [width] 将范围 [range] 包括的行居中对齐
5 :[range]le[ft] [indent] 将范围 [range] 中的行靠左对齐 (使用 [indent])
6 :[range]ri[ght] [width] 将范围 [range] 中的行靠右对齐
8 & 在当前行上重复上一次的 “:s” 命令

9 搜索并替换

:[range]s[ubstitute]/{pattern}/{string}/[g][c]
  • 以 {string} 替代范围 [range] 包括的行中的 {pattern}
  • 与 [g] 共用,替代所有的出现的 {pattern};
  • 与 [c] 共用,每一次替代时需要手动确认

10 可视模式

序号 快捷键 功能
1 V 以行方式开始高亮
2 v 以字符方式开始高亮
3 as 选择 “一个句子” (sentence)
4 ap 选择 “一个段落” (paragraph)
5 a' 选择 “一个单引号字符串”

11 重复命令

序号 快捷键 功能
1 N . 重复最近一次改动 (但计数改为 N)
2 q{a-z} 记录键入的字符,存入寄存器 {a-z}
3 q 终止记录
4 @{a-z} 执行寄存器 {a-z} 的内容 (N 次)

12 键盘映射

序号 快捷键 功能
1 :ma[p] {lhs} {rhs} 在普通及可视模式下将 {rhs} 映射为 {lhs}
2 :ma[p]! {lhs} {rhs} 在插入及命令行模式下将 {rhs} 映射为 {lhs}
3 :no[remap][!] {lhs} {rhs} 同 “:map”,但不对 {rhs} 重新映射
4 :unm[ap] {lhs} 清除普通及可视模式下 {lhs} 的映射
5 :ma[p] [lhs] 列出普通及可视模式下以 [lhs] 开始的映射
6 :cmap 同 :map, 但仅作用于命令行模式 (Command-line)
7 :mkv[imrc][!] 将当前的键盘映射、缩写及设置写入文件, ! 表覆盖
8 :ab[breviate] {lhs} {rhs} 为 {rhs} 加入缩写 {lhs}

13 设置

序号 快捷键 功能
1 :se[t] 显示所有被改动的选项
2 :se[t] {option} 置位布尔选项 (开启)
3 :se[t] no{option} 复位布尔选项 (关闭)
4 :se[t] inv{option} 逆转布尔选项的值
5 :se[t] {option}={value} 设置字符串 / 数值选项的值为 {value}
6 :se[t] {option}? 显示 {option} 的值
7 :se[t] {option}& 重置 {option} 为其缺省值
8 :opt[ions] 打开一个新窗口,用来参看并设置选项

14 撤销

序号 快捷键 功能
1 u 销最近的操作
2 U 恢复最近被改动的行
3 ctrl-r 重做最近被撤销的改动

15 外部命令

序号 快捷键 功能
1 :sh 开启一个 shell 外壳,exit 后返回 vim
2 :!{command} 通过 shell 外壳执行命令

16 Quickfix 命令

序号 快捷键 功能
1 :cc [nr] 显示第 [nr] 个错误 (缺省为同一错误)
2 :cn 显示下一个错误
3 :cp 显示上一个错误
4 :cl 列出所有错误
5 :cf 从文件’errorfile’ 读入错误
6 :make [args] 启动 make,读入错误,并跳转到第一个错误
7 :gr[ep] [args] 执行’grepprg’ 程序以找出匹配并跳转到首个匹配

17 其他

序号 快捷键 功能
1 ctrl-l 清除并重画屏幕
2 ctrl-g 显示当前文件名 (包括路径) 和光标位置
3 ga 以十进制、十六进制和八进制显示光标所在字符的 ASCII 值
4 ga 以十进制、十六进制和八进制显示光标所在字符的对应字节序列
5 ctrl-c 在查找中: 中断查找
6 :ve 显示版本信息

18 范围

序号 快捷键 功能
1 , 分隔两个行号
2 ; 同上,但在解释第二个行号之前先移动光标至第一个行号代表的行
3 . 当前行
4 $ 文件的最后一行
5 % 等同于 1,$ (整个文件)
6 * 等同于 '<,'> (可视区域)
7 't 或 `t 位置标记 t 的位置
8 ?{pattern}[?] 前一个匹配 {pattern} 的行

19 启动 vim

启动 vim 时可以带多个参数,格式为 vim [options]

序号 快捷键 功能
1 -g 启动 GUI (同时允许其他选项)
2 +[num] 置光标于第 [num] 行 (缺省: 末行)
3 +{command} 载入文件后执行命令 {command}
4 -R 只读模式,隐含 -n
5 -d 比较模式 diff
6 -r {file} .. 恢复中断的编辑

20 多窗口命令

序号 快捷键 功能
1 <ctrl-w> s 或 :split 将窗口分割成两部分 (split)
2 :split {file} 分隔窗口并在其中一个编辑 {file}
3 :vs[plit] {file} 同上,但垂直分割
4 :sf[ind] {file} 分割窗口,从 {path} 中找到文件 {file} 并编辑之
5 ctrl-w ] 分割窗口并跳转到光标下的标签
6 ctrl-w f 分割窗口并编辑光标下的文件名 (file)
7 ctrl-w n 或 :new 创建新空白窗口 (new)
8 ctrl-w q 或 :q[uit] 退出编辑并关闭窗口 (quit)
9 ctrl-w c 或 :cl[ose] 隐藏当前缓冲区并关闭窗口 (close)
10 ctrl-w o 或 :on[ly] 使当前窗口成为唯一窗口 (only)
11 ctrl-w j 跳转到下方窗口
12 ctrl-w k 跳转到上方窗口
13 ctrl-w ctrl-w 移动光标至下方窗口 (折转) (Wrap)
14 ctrl-w W 移动光标至上方窗口 (折转) (wrap)
15 ctrl-w t 跳转到顶端窗口 (top)
16 ctrl-w b 跳转到底端窗口 (bottom)
17 ctrl-w p 跳转到上一次激活的窗口 (previous)
18 ctrl-w r 向下旋转窗口 (rotate)
19 ctrl-w R 向上旋转窗口 (Rotate)
20 ctrl-w x 将当前窗口与下一个窗口对调 (eXchange)
21 ctrl-w = 使所有窗口等高等宽
22 ctrl-w - 减少当前窗口高度
23 ctrl-w + 增加当前窗口高度
24 ctrl-w _ 设置当前窗口高度 (缺省: 很高)
25 ctrl-w < 减少当前窗口宽度
26 ctrl-w > 增加当前窗口宽度
27 ctrl-w 设置当前窗口宽度 (缺省: 尽可能宽)
28 :e {file} 在当前分屏中编辑 file 文件

21 折叠

在某一段落键入 zfap 会将此段落折叠,其中 zf 是一个操作符 (fold),ap 是一个段落对象 (a paragraph) 使用 zo 打开折叠 (open),zc 关闭折叠 (close)。 折叠可以嵌套,所以我们可以折叠每节中的每个段落,然后再折叠一章中的各节。

序号 快捷键 功能
1 set foldmethod=manual 手动折叠
2 set foldmethod=indent 按照缩进折叠
3 set foldmethod=expr 按照表达式’foldexpr’ 折叠
4 set foldmethod=syntax 按照语法区域折叠
5 set foldmethod=marker 按照标志’foldmarker’ 折叠
6 :{range}fold 将范围 {range} 包括的行定义为一个折叠
7 zd 删除光标下的一个折叠 (delete)
8 zD 删除光标下的所有折叠 (Delete)
9 zo 打开光标下的折叠 (open)
10 zO 打开光标下的所有折叠 (Open)
11 zc 关闭光标下的一个折叠 (close)
12 zC 关闭光标下的所有折叠 (Close)
13 zm 折起更多: 减少’foldlevel’ (more)
14 zM 关闭所有折叠: 置’foldlevel’ 为 0
15 zr 减少折叠: 增加’foldlevel’ (reduce)
16 zR 打开所有折叠: 置’foldlevel’ 为最大
17 zn 快速禁止折叠功能
18 zi 禁止 / 恢复原来的折叠