给vim小白的快捷键速成手册

实习组的代码保密级别高,要求代码不能拉到本地(当然也不能远程连接服务器上的git仓库),一律在服务器上进行开发、测试。CLion白学了,投奔vim。

对于大部分人而言,如果综合学习成本和开发效率,能用IDE还是用IDE吧。

vim还是emacs

不要纠结,抓起一个就是干。

基本概念

对于我等vim小白而言,在使用vim之前,务必要清楚“命令模式”(Command mode)、“底线命令模式”(Last line mode)、“输入模式”(Insert mode,也叫做“编辑模式”)三个概念,和两三个常用的“命令”

首先,保证你处于unix-style的系统(如各种linux发行版,macOS等。windows未实验),输入法处于英文的输入模式。然后,用vim命令打开一个文件:

1
$ vim hello_world.txt

如果文件不存在,vim会帮我们创建文件。

什么都不做。现在我们处于“命令模式”:

命令模式-01

命令模式可以直接敲击键盘进行操作,但不能编辑。没内容没法操作,因此,我们先敲击字母“i”,进入“输入模式”:

输入模式-01

输入模式的特点是,窗口最下方有“INSERT”字样。输入模式就可以输入内容了,输入“hello world”。字母“i”在命令模式下是一个“命令”,在输入模式下就是个单纯的字母了——敲击“<Enter>”键换到下一行,敲击字母“i”就输入了一个“i”:

输入模式-02

接下来,敲击"<Esc>"键(键盘左上角)退出输入模式。退出后,将回到命令模式,就不能编辑了:

命令模式-02

看,回到命令模式后,窗口最下方就没有有“INSERT”字样了。

最后,敲击符号“:”(切记,英文符号)进入底线命令模式:

底线命令模式-01

底线命令模式的特点是,窗口最下方有一个“:”。在“:”之后,我们可以输入命令;然而这里的命令与命令模式下的命令有所不同,比如刚才的字母“i”,在这里输入是无效的。我们先敲击“<Esc>”键退出输入模式或底线命令模式,以回到命令模式。然后,再次敲击符号“:”,重新进入底线命令模式。这次,我们输入“wq”,敲击“<Enter>”键——“wq”的意思是“保存并退出”,在这之后,我们保存内容并退出了vim。

实际上,“wq”是连续的两个命令:“w”是保存“write”的缩写,“q”是退出“quit”的缩写,unix-style鼓励我们使用缩写。

让我们验证文件内容:

1
2
3
$ cat hello_world.txt
hello world
i

good job!

快捷键速成手册

vim的简单在于,掌握了三个模式后,剩下的就是查阅各种牛逼的快捷键,然后熟练操作。不过,与其他长篇累牍介绍vim快捷键的文章不同,猴子崇尚“less is more”。

下面列出了猴子最常用的快捷键,可以像猴子一样,把它当做极简版的快捷键手册,直接配置在“.vimrc”(vim的配置文件,在用户目录"~"下)中:

  • "开头的行是注释,其他是vim脚本,vim启动时执行“.vimrc”中的全部vim脚本
  • 绝大部分是命令模式的命令
  • 以“:”开头的是底线命令模式的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
" 一些特殊的vim脚本,可以在底线命令模式执行,暂时忽略它们
syntax on " 根据语法渲染
set nu " 显示行号
" set nu! " 不显示行号
set colorcolumn=100
set tabstop=4
set expandtab
set autoindent
set paste!
" 极简版速成手册
" 各种移动光标
" vim建议光标移动使用"hjkl",让手保持在键盘中心。但猴子暂时还是习惯使用方向键
" h 向左移动一次光标
" j 向下移动一次光标
" k 向上移动一次光标
" l 向右移动一次光标
" b 移动光标到上一词首
" 未定义移动光标到下一词尾
" w 移动光标到下一词首
" e 移动光标到下一词尾
" <ctrl> + u 向上滚动10行(行数可配置)
" <ctrl> + d 向下滚动10行
" <ctrl> + f 向下滚动一屏
" <ctrl> + b 向上滚动一屏
" gg 移动光标到文件首
" G 移动光标到文件尾
" 将数字和方向命令组合在一起,vim大法好
" 10k 移动光标到向上10行,10可以是任意正数。自然10j就是光标向下移动10行
" 10h 移动光标到向左10个字符,10l同理
" <ctrl> + o 移动光标到上一位置
" 进入输入模式
" i 在当前位置后插入字符
" I 在当前位置前插入字符
" o 在当前行后插入行
" O 在当前行前插入行
" 复制
" y 复制选中范围(配合后面的可视模式操作)
" yy 复制行
" y10 从当前行开始向下数,共复制11行
" ye 复制到词尾(含词尾),其他组合同理
" 粘贴
" p 在当前位置后插入
" P 在当前位置前插入
" 剪切(复制 + 删除)
" d 剪切选中范围
" dd 剪切行
" d10 从当前行开始向下数,共剪切11行
" de 删除到词尾(含词尾),其他组合同理
" x 剪切选中范围。命令模式至少选中一个字符,因此x更常用于剪切单个的字符,其他范围类操作建议使用d
" 剪切 = 复制 + 删除, 意味着接下来可以进行粘贴
" v 字符可视模式(一种特殊的命令模式)
" V 行可视模式
" <ctrl> + v 列可视模式。进入列可视模式后,可配合I指令进行列编辑
" 可视模式选择“块”后,方便进行可视化的剪切和复制,执行指令或敲击<Esc>键退出可视模式
" 选择“块”时,命令模式下各种光标移动方式仍然有效,使得用户能够高效选择从光标起点(进入可视模式的位置)到光标终点(光标移动后的位置)的块
" r 覆盖,可以简化“先删除再输入”的操作顺序
" u undo
" <ctrl> + r redo
" :w 写入
" :q 退出
" :wq 写入+退出,命令的灵活组合是vim效率所在
" :10 光标移动到第10行(行号从1开始)

just do it!

扫描微信关注我
微信公众号二维码
本文链接:给vim小白的快捷键速成手册
作者:猴子007
出处:https://monkeysayhi.github.io
本文基于 知识共享署名-相同方式共享 4.0 国际许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名及链接。
我是猴子007,<br>一只非常特殊的动物,<br>可以从事程序的开发、维护,<br>经常因寻找香蕉或母猿而无心工作。