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 | 
      禁止 / 恢复原来的折叠 |