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 常用键位生存指南