跳到主要内容

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>:插入;

键位图

键位图