Vim帮助文档的快键键是:vimtutor

普通模式(Normal mode)

  1. vim打开进入的就是普通模式
  2. vim从其他模式进入普通模式按ESC键,可以多次按ESC
  3. 保存退出:shift zz
  4. 代码格式优化:shift g
  5. 光标的移动:
  6. H:←
  7. J:↓
  8. K:↑
  9. L:→
  10. 行首:0,^:移动到行首的非空白字符
  11. 行尾:$, g_:移动到行尾的非空白字符
  12. 头部:gg
  13. 尾部:G
  14. 一行中的单词移动:
  15. w/W移动到下一个word/WORD开头
  16. e/E移动到下一个word/WORD结尾
  17. b/B移动到上一个word/WORD开头
  18. word指的是以非空白符分割的单词
  19. WORD指的是以空白符分割的单词
  20. 一行中的搜索的字符移动
  21. f{char} 移动到char字符上,F是从行尾往前搜索
  22. t{char} 移动到char字符前,T是从行尾往前搜索
  23. 分号(;)向后继续搜索
  24. 逗号(,)向前继续搜索
  25. 当前行向下移动N行,N+Enter
  26. 定位:行数 + G
  27. H:移动屏幕的顶部
  28. M:移动到屏幕的中间
  29. L:移动到屏幕的底部
  30. ctrl + u:向上翻页
  31. ctrl + f:向下翻页
  32. zz:让光标的所在行成为屏幕的中间行
  33. 删除操作
  34. 删除光标前一个字符:X
  35. 删除光标后的一个字符:x
  36. 删除光标后的一单词:dw
  37. 删除光标前的字符串:d0
  38. 删除光标后的字符串:d$ 或者 D
  39. 删除当前行:dd
  40. 删除当前光标行下的多行:行数 + dd
  41. 删除当前光标后的字符至指定的字符:dt + 指定的字符
  42. 撤销:u
  43. 反撤销:ctrl + r
  44. 复制:
  45. 一行:yy
  46. 多行:行数 + yy
  47. 粘贴:
  48. p粘贴到光标的下一行
  49. P粘贴到光标的上一行
  50. 粘贴系统粘贴板中的内容:"+p
  51. 匹配:
  52. *:向前匹配光标所在的单词
  53. #:向后匹配光标所在的单词

插入模式(Insert mode)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vim从普通模式切换到插入模式
    a:从光标后开始插入
    A:从光标所在行的行尾插入
    i:从光标前开始插入
    I:从光标所在行的行首插入
    o:光标下面创建新的一行
    O:光标上面创建新的一行
    s:删除光标盖住的字符
    4s:删除4个字符,并进入插入模式
    S:删除光标所在的行
    gi:从普通模式快速切换到上次编辑的位置,并进入插入模式
    r:替换单个字符,并进入插入模式
    R:一直替换字符
    cw:删除单词,进入插入模式
    C:删除一行进入插入模式
    ct+字符:删除到指定的字符,并进入插入模式,和dt+字符用法相似


删除操作:
    删除光标前一个字符:ctrl + h
    删除光标前一个单词:ctrl + w
    删除光标所在当前行:ctrl + u

命令行模式(Command line mode)

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
进入命令模式的方式
    执行命令: :键
    搜索命令:/和?键
    过滤命令:!键
注:vim执行完命令行就会返回普通模式

保存退出:wq == x
保存不退出:w
退出:q
退出不保存:q
:e!: 放弃修改,重新加载
:e file 在同一个vim窗口加载file文件
:set paste 原格式粘贴

替换:
substitute 命令允许我们查找并且替换掉文本,并且支持正则式
:[range]s[ubstitute]/{pattern}/{string}/[flags]
    range 表示范围比如:1020表示10-20行,%表示全部
    pattern是要替换的模式,string是替换后文本
flags:
    g(global)表示全局范围内执行
    c(confirm)表示确认,可以确认或者拒绝修改
    n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
案例:
    替换光标所在行:
        :s/old/new/gc
    替换多行:
        :n1,n2 s/old/new/gc
        n1,n2表示行数
    替换当前文档:
        :% s/old/new/gc
    统计单词的个数:
        :% s/word//n
    匹配完成的单词:
        :% s/\<word\>/new/g

分屏:
    水平分屏:sp
    垂直分屏:vsp
    退出:q
    分屏之间切换:ctrl + ww
    退出所有:qall
    保存所有:wall
    退出保存所有:wqall
    分屏另一个文件:sp/vsp filename
    同时给多个文件水平分屏:vim -o[filenumber] filenames
    同时给多个文件垂直分屏:vim -O[filenumber] filenames

可视模式(Visual mode)

1
2
3
4
5
6
7
8
9
10
11
调用的快捷键:v
复制:y
删除:d
粘贴:
    小p:粘贴到光标的后面
    大P:粘贴到光标的前面
替换:
    r:替换光标覆盖的当前字符(一个)
    R:替换光标覆盖的当前字符串(多个)

行之间的选择:使用大v进入