1、Vim简介

Vim是一款专业的文本编辑器,有正常模式插入模式可视模式替换模式

  • 正常模式:使用快捷键命令,或按:输入命令行;
  • 插入模式:可以输入文本,在正常模式下按iao等可以进入该模式;
  • 可视模式:
    • 可视模式:移动光标可以选择文本,在正常模式下按v进入该模式;
    • 可视行模式:移动光标可以选择整行文本,在正常模式下按V进入该模式;
    • 可视块模式:移动光标可以选择整块文本,在正常模式下按ctrl+v进入该模式;
  • 替换模式:在正常模式下按R进入该模式。

2、启动Vim

3、文档操作

4、光标移动

4.1 基本移动

正常模式:(都可配合数字来使用,比如输入3h,光标左移3字符)

  1. 左移一个字符:h或退格键
  2. 右移一个字符:l或空格
  3. 上移一个字符:k
  4. 下移一个字符:j
  5. 移动到一段内的下一行:gj
  6. 移动到一段内的上一行:gk
  7. 移至下一行首个非空字符:+或enter键
  8. 移至上一行首个非空字符:-
  9. 前移一个字符,不忽略标点移至下一个字符开头:w
  10. 前移一个字符,忽略标点移至下一个字符开头:W
  11. 前移一个字符,移至下一字符末尾:e
  12. 前移一个字符,移至下一字符末尾,词尾有标点,移至标点:E
  13. 后移一个字符,移至上个字符开头:b
  14. 后移一个字符,移至上个字符开头,忽略标点:B
  15. 后移一个字符,移至上个字符(不含标点)末尾:ge
  16. 后移一个字符,移至上个字符(含标点)末尾:gE
  17. 前移1句: (
  18. 后移一句:)
  19. 移至同一行下一个x字符处:fx
  20. 移至同一行上一个x字符处:Fx
  21. 移至同一行下一个x字符前:tx
  22. 移至同一行上一个x字符前:Tx
  23. 配合ft使用,重复一次:;
  24. 配合ft使用,反向重复一次:,
  25. 移动至行首:0
  26. 移动至屏幕行首:g0
  27. 移动至本行首个非空字符:^
  28. 移动至屏幕本行首个非空字符:g^
  29. 移动至行尾:$
  30. 移动至屏幕本行行尾:g$
  31. 移至第n列:n|
  32. 移至文件第n行:nG
  33. 移至屏幕最顶端一行:H
  34. 移至屏幕中间一行:M
  35. 移至屏幕最低端一行:L
  36. 移至文件首行:gg
  37. 移至文件尾行:G

4.2 翻屏

  1. 上翻一屏:ctrl+f 或 fn+↑
  2. 下翻一屏:ctrl+b 或 fn+↓
  3. 上翻半屏:ctrl+u
  4. 下翻半屏:ctrl+b
  5. 向下滚动一行:ctrl+e
  6. 向上滚动一行:ctrl+y
  7. 到文件n%位置:n%
  8. 当前行移至屏幕中央:zz
  9. 当前行移至屏幕顶端:zt
  10. 当前行移至屏幕底端:zb

4.3 标记

  1. 标记光标所在位置,只用于当前文件:m{a~z}
  2. 标记光标所在位置,全局标记,退出再启动仍有效:m{A~Z}
  3. 移动到标记位置:’{a~z}
  4. 移动到标记行首:`{a~z}
  5. 回到上[2~10]次退出vim时最后离开的位置:’{0至9}
  6. 移动到上次编辑的位置:``或’’
  7. 移至上次离开地方:`’’
  8. 移至最后改动地方:`.
  9. 显示所有标记: :marks
  10. 删除标记a: :delmarks a
  11. 删除当前缓存区所有标记: :delmarks!

5、插入文本

5.1 基本插入

  1. 在光标前插入:i
  2. 在当前行首个非空字符前插入:I
  3. 在当前行第一列插入:gI
  4. 在光标后插入:a
  5. 在当前行最后插入:A
  6. 在下面新建一行插入:o
  7. 在上面新建一行插入:O
  8. 在当前位置插入另一个文件内容::r filename
  9. 在第[n]行插入另一个文件内容: :nr filename
  10. 在光标处插入当前日期与时间: :r !date

5.2 改写插入

  1. 改写光标后n个词: cnw
  2. 改写光标后n个字母:cnl
  3. 改写光标前n个字母:cnh
  4. 修改当前n行:ncc
  5. 以输入文本替代光标后n个字符:ns
  6. 输入文本替代指定数目行:nS

6、剪切复制和寄存器

6.1 剪切复制和粘贴

  1. 剪切右边n个字符:nx
  2. 剪切左边n个字符:nX
  3. 复制可视模式下选中文本:y
  4. 复制整行文本:yy或Y
  5. 复制n个字符:ynw
  6. 复制光标右边n个字符:ynl
  7. 复制光标左边n个字符:ynh
  8. 从光标当前位置复制到行尾:y$
  9. 从光标当前位置复制到行首:y0
  10. 复制m行到n行内容::m,ny
  11. 复制光标以上所有行:ygg或y1G
  12. 复制光标以下所有行:yG
  13. 复制一个词或句子:yaw或yas
  14. 删除(剪切)在可视模式下选中文本:d
  15. 删除(剪切)当前位置到行尾的内容:d$或D
  16. 删除(剪切)n个单词:dnw
  17. 删除(剪切)光标右边n个字符:dnl
  18. 删除(剪切)光标左边n个字符:dnh
  19. 删除(剪切)当前位置到行首的内容:d0
  20. 删除(剪切)n行:ndd
  21. 删除m到n行内容:m,nd
  22. 剪切光标以上所有行:d1G或dgg
  23. 剪切光标以下所有行:dG
  24. 剪切一个词或一个句子:daw或das
  25. 删除当前位置到下一个f之间内容:d/f
  26. 在光标后粘贴:p
  27. 在光标前粘贴:P

6.2 文本对象

  1. 一个词:aw
  2. 一句:as
  3. 一段:ap
  4. 一块:ab

6.3 寄存器

  1. 寄存器名:az AZ
  2. 显示所有寄存器::reg
  3. 不加索引时默认的寄存器:””
  4. 当前缓存区:’’*
  5. 系统剪切板:’’+

7、查找与替换

7.1 查找

  1. 后面文本查找a:/a
  2. 在前面文本查找a:?a
  3. 将光标停在包含pattern的行后面第n行上:/pattern/+n
  4. 将光标停在包含pattern的行前面第n行上:/pattern/+n
  5. 向后面查找下一个:n
  6. 向前面查找下一个:N

7.2 替换

  1. 用new替换当前行第一个old: :s/old/new
  2. 用new替换当前行所有old: :s/old/new/g
  3. 用new替换文件n1至n2行所有old: :n1,n2s/old/new/g
  4. 用new替换文件所有old: :%s/old/new/g
  5. 在每一行行首插入xx::%s/^/xx/g
  6. 在每一行行尾插入xx::%s/$/xx/g

8、排版

8.1 基本排版

  1. 向左缩进一个shiftwidth:<<
  2. 向右缩进一个shiftwidth:>>
  3. 本行文字居中::center
  4. 本行文字居左::left
  5. 本行文字居右::right
  6. 对文字重排,对过长文字断行:gq
  7. 重排当前行:gqq
  8. 重排n行:gqnq
  9. 重排当前段:gqap
  10. 重排n段:gqnap
  11. 重排当前行和下面n行:gqnj
  12. 重排当前段对文章末尾:gqQ
  13. 拼接当前行和下一行:J
  14. 拼接当前行和下一行不留空格:gJ

8.2 拼写检查

  1. 开启拼写检查功能::set spell
  2. 关闭拼写检查功能::set nospell
  3. 移到下一个拼写错误的单词:]s
  4. 移到上一个拼写错误的单词:[s
  5. 显示一个有关拼写错误单词的列表:z=
  6. 告诉拼写检查器该单词是正确的:zg
  7. 告诉拼写检查器该单词是错误的:zw

统计字数

  1. g

9

10 分屏编辑

  1. 水平分割窗口

11

12

13 编程辅助

13.1

  1. 跳转到局部变量定义处:gd
  2. 跳转到全局变量定义处,从当前文件开头搜索:gD
  3. 上一个修改的地方:g;
  4. 下一个修改的地方:g,
  5. 跳转到上一个函数块开始,需要有单独一行的{:[[
  6. 跳转到下一个函数块开始,需要有单独一行的{:]]
  7. 跳转到上一个函数块结束,需要有单独一行的}:[]
  8. 跳转到下一个函数块结束,需要有单独一行的}:][
  9. 跳转到当前函数块开始:[{
  10. 跳转到当前函数块开始:]}
  11. 跳转到当前注释块开始:[/
  12. 跳转到当前注释块结束:]/

13.7 自动补全

  1. 拼写建议:

13.8 多行缩进缩出

1.

13.9 折叠