Vim 常用键位生存指南
Vim 是从 UNIX 下的 Vi
发展出来的一个文本编辑器,近几年,伴随 VSCode、Atom、Sublime
等一众轻量级编辑器的快速发展,涌现了大量基于这些编辑器平台的 Vim
快捷键插件,甚至 Chrome 和 Firefox 上都已经分别提供
Vimium、VimFx 等优秀插件。虽然 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"→ 会选择 foova"→ 会选择"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 常用键位生存指南




