跳到主要内容

vim 教程

简明教程

模式

模式类型
  • Normal: 文件移动;
  • Insert: 插入文本;
  • Replace: 替换文本;
  • Visual: 选择文本;
  • Command: 运行命令;
模式切换
  • 默认模式为 Normal;
  • 任意默认使用 ESC 返回 Normal;
  • 普通模式使用快捷键进入其他模式;
    • i: Insert;
    • R: Replace;
    • v: Visual;
    • V: Visual (line);
    • Ctrl + V: Visual(block);
    • :: Command;
  • 推荐将 Caps 映射为 ESC;

缓冲区, 窗口和标签

  • 一个文件对应一个缓冲区;
  • 一个 Vim 具有多个标签;
  • 一个标签具有多个窗口 (分屏);
  • 一个窗口显示一个缓冲区;

常用命令

Command

  • 操作文件;
    • 关闭: : q;
    • 保存: : w;
    • 关闭并保存: : wq/: x;
    • 打开缓冲区: : e{fileName};
    • 显示缓冲区列表: ls;
    • 强制操作: 以上操作之前添加 !;
  • 分割窗口;
    • 分割: sp/vsp;
    • 改变活动窗口: <Ctrl + W><hjkl>;
    • 互换分屏窗口: <Ctrl + W>, r;
    • 关闭分屏窗口;
      • 关闭当前窗口: <Ctrl + W>, c;
      • 保留当前分屏: : only;
      • 关闭当前分屏: : hide;

Normal

移动
  • 基本移动: 左下上右 (hjkl)
  • 单词;
    • w: 下一单词;
    • b: 单词开头;
    • e: 单词结尾;
    • *: 光标当前单词的下一个出现位置;
    • %: 跳转相应 (, {, [;
  • 行;
    • 0: 行开头;
    • ^: 第一个非空白字符;
    • $: 行结尾;
  • 屏幕;
    • H: 屏幕顶部;
    • M: 屏幕中部;
    • L: 屏幕底部;
  • 滚动;
    • ctrl-u: 向上滚动半屏;
    • ctrl-d: 向下滚动半屏;
    • zz: 当前位置设置为屏幕中间;
  • 文件;
    • gg: 文件开头;
    • G: 文件结尾;
  • 行号;
    • : {number}<CR>/:{number}G: 移动至第 number 行;
  • 查找;
    • f{character}: 当前行第一个 character;
      • fa: 当前行 a 下一个出现位置;
      • fa; : a 下一个出现位置;
      • fa, : a 上一个出现位置;
      • 3fa: 当前行 a 第三次出现位置;
    • t{character}: 当前行第一个 character 的前一个字符;
编辑
  • 插入: 进入 Insert 模式;
    • i: 当前光标插入;
    • o: 当前行上方插入;
    • O: 当前行下方插入;
    • a: 光标后插入;
  • 替换: c{motion};
    • cw: 替换光标至单词末尾内容;
    • c$: 替换光标至行尾内容;
    • c0: 替换光标至行首内容;
    • s: 替换字符, 等同于 cl;
  • 删除: d{motion};
    • dw/d$/d0 (删除单词/至行尾/至行首);
    • dd: 删除并赋值当前行;
    • dt{character}: 删除至 character;
    • x: 删除字符, 等同于 dl;
  • 复制: y{motion};
    • yy: 复制当前行;
  • 粘贴;
    • p: 光标后粘贴;
    • P: 光标前粘贴;
  • u: 撤销;
  • 提示 Ctrl + n;
计数
  • 重复执行上一条命令: . ;
  • 重复执行特定动作 N 次;
    • 3w: 向前移动 3 个单词
    • 5j: 向下移动 5 行;
    • 7dw: 删除 7 个单词;
移动
  • 配合移动指定对应命令;
  • <start position><command><end position>;
    • 0y$: 移动行首, 执行 y, 当行尾:

Visual

行选中
  • Visual 模式使用;
  • <action>i<object><action>a<object>;
矩形块
  • 0<Ctrl-v><Move><action>[ESC];
    • 0: 跳转至当前行第一列;
    • <Ctrl-v>: 块选择;
    • <Move>: 移动块;
    • <action>: 插入;

键位图

键位图