Vim 常用键位生存指南

Vim 是从 UNIX 下的 Vi 发展出来的一个文本编辑器,近几年,伴随 VSCodeAtomSublime 等一众轻量级编辑器的快速发展,涌现了大量基于这些编辑器平台的 Vim 快捷键插件,甚至 Chrome 和 Firefox 上都已经分别提供 VimiumVimFx 等优秀插件。虽然 Vim 本身因为其繁琐的配置,日常开发中已经较少直接使用,但是其快捷键操作习惯得以保留,因此 Vim 逐渐从一套自由软件发展为可以在诸多平台上使用的快捷键套装。

本文总结了笔者运用 Vim 作为日常开发工具的过程当中,经常使用到的一些快捷键和命令,并简单的按照操作进行了一个分类,帮助Vim Junior在纷繁的快捷键位里快速适应并生存下来,逐步成为一名熟练的Vim Addict。文章部分命令和键位的解释参考了《简明 VIM 练级攻略》一文,快捷键位示例图则取自《Graphical vi-vim Cheat Sheet and Tutorial》,除此之外还参考了《Vim 用户手册》

Vim 键位图概览

基本操作

  • i → 进入 insert 模式。
  • ESC → 返回 Normal 模式。
  • h、j、k、l → 上下左右移动鼠标。
  • x → 删当前光标所在的一个字符。
  • p → 粘贴剪贴板。
  • dd → 删除当前行,并把删除的行存到剪贴板里。
  • :wq → 存盘 + 退出(:w存盘,:q退出)。
  • :help <命令> → 显示相关命令帮助。

常用插入模式

  • a → 在光标后插入
  • A → 在一行的末尾开始插入
  • o → 在当前行后插入一个新行
  • O → 在当前行前插入一个新行
  • cw → 替换从光标所在位置后到一个单词结尾的字符

光标控制

  • 0 → 数字零,到行头。
  • ^ → 到本行第一个不是 blank 字符的位置(blank字符是指空格、tab、换行、回车等)。
  • $ → 到本行行尾。
  • g_ → 到本行最后一个不是 blank 字符的位置。
  • /pattern → 搜索 pattern 模式匹配的字符串(如果搜索出多个匹配项,可按下 n 键跳到下一个)。

复制/粘贴

  • P小写 → 在当前位置之后粘贴。
  • p大写 → 在当前位置之前粘贴。
  • yy → 拷贝当前行当行于 ddP。

撤销/恢复

  • u → undo 撤销
  • CTRL+r → redo 恢复

文件操作

  • :e <path/to/file> → 打开一个文件。
  • :w → 存盘。
  • :saveas <path/to/file> → 另存为
  • :x/ZZ/wq → 保存并退出(:x 表示仅在需要时保存,ZZ 不需要输入冒号和回车)。
  • :q! → 退出不保存。
  • :qa! → 强行退出所有的正在编辑的文件。
  • :bn/bp → 切换下一个或上一个打开的文件。

进阶操作

  • . → 重复上一次操作。

  • N<command> → 重复某个命令 N 次(例如:2dd 删除 2 行,3p 粘贴文本 3 次)。

  • NG → 到第 N 行。

  • gg → 到第 1 行(等效于 1G 或:1)。

  • G → 到最后 1 行。

  • w/e → 小写,到下一个单词的开头或结尾。

  • W/E → 大写,在单词由 blank 字符分隔的情况下使用。

  • % → 光标在一对匹配括号(,{,[之间移动。

  • */# → 匹配光标当前所在单词,移动光标到下 1 个或上 1 个匹配单词。

  • d → 删除

  • v → 可视化的选择(首先按 v,然后移动光标选择文件,最后执行删除、复制、大小写转换等操作)。

  • gU → 变大写

  • gu → 变小写

  • <开始位置> <命令> <结束位置>

  • 0y$表示拷贝当前行,0(先到行头)、y(从这里开始拷贝)、$(拷贝到本行最后 1 个字符)。

  • ye表示从当前位置拷贝到本单词的最后一个字符。

  • y2/foo拷贝 2 个foo之间的字符串。

在当前行移动光标

  • 0 → 到行头。
  • ^ → 到本行第一个非 blank 字符。
  • $ → 到行尾。
  • g_ → 到本行最后一个非 blank 字符的位置。
  • fa → 到下一个为a的字符处,也可以 fs 到下一个为s的字符处。
  • t, → 到逗号前的第 1 个字符。逗号可以变成其它字符。
  • F/T → 功能类似于 f 和 t,但是方向相反。
  • 3fa → 在当前行查找第 3 个出现的a
  • dt" → 删除所有的内容,直到遇到双引号"

区域选择

<action>a<object> 或者 <action>i<object>

  • action:可以是任何的命令(如d删除、y拷贝、v可视模式)。
  • object:可以是w(一个单词)、W(一个以空格分隔的单词)、s(一个句子), p(一个段落)。也可以是 1 个特殊字符"')}]

例如:现在有字符串(map (+) ("foo")),光标会于第 1 个 o 的位置。

  • vi" → 会选择 foo
  • va" → 会选择"foo"
  • vi) → 会选择"foo"
  • va) → 会选择("foo")
  • v2i) → 会选择 map (+) ("foo")
  • v2a) → 会选择(map (+) ("foo"))

块操作 CTRL+v

  • CTRL+v → 开始块操作(执行下列操作时,首先要开启该操作)。
  • CTRL+d → 移动到文件的末尾(可以通过 hjkl 移动光标,或使用%)。
  • CTRL+q → 粘贴被复制的块。
  • ^ → 跳转至行头。
  • I-- [ESC]I是插入,插入的字符串是--,最后按下ESC键使其在所有被选择的行生效。

自动提示 CTRL+n/p

CTRL+n/p → Insert 模式下,可以输入一个词的开头,然后按下CTRL+n或者CTRL+p键,就会开启自动补齐功能。

宏录制

  • qa → 将开发人员的操作记录在寄存器 a。
  • @a → 重新运行录制的宏。
  • @@ → 快捷键,重新运行录制的宏。

例如:执行宏录制命令qaYp<C-a>q,其中qa开始录制,Yp复制行,CTRL+a使光标当前数字增加 1,q停止录制。

可视化选择

  • v → 可视
  • V → 可视行
  • CTRL+v → 可视块

选择完成之后可以进行如下操作:

  • J → 把所有的行连接起来(变为 1 行)。
  • < 或 > → 左右缩进
  • = → 自动给缩进(为代码块添加缩进)。

例如:在所有被选择行的末尾添加字符串,首先按下 CRTL+v 选中相关的行,然后通过$键将光标移动到代码的末尾,最后按下 A 键插入文本然后输入字符串,最后按 ESC 生效。

分屏

  • split → 重直分屏。
  • vsplit → 横向分屏。
  • CTRL+h/j/k/l → 在分屏窗口之间上下左右进行切换。
  • CTRL +/- → 缩放窗口和字体。

可以通过在命令行键入vimtutor进入 VIM 官方教程。

Vim 常用键位生存指南

http://www.uinio.com/Linux/Vim/

作者

Hank

发布于

2011-10-08

更新于

2019-06-17

许可协议