vi:visual Interface
vim:VI improved

1. Vim模式

vim有三种模式,分别是编辑模式(命令模式),输入模式,末行模式
模式转换:
编辑->输入
i:在当前光标所在字符的前边,转为输入模式
a:在当前光标所在字符的后边,转为输入模式
o:在当前光标所在行的下边新建一行,转为输入模式

I:在当前光标所在行的前边,转为输入模式
A:在当前光标所在行的后边,转为输入模式
O:在当前光标所在行的上边新建一行,转为输入模式
输入->编辑:ESC
编辑->末行::
末行->编辑:ESC

2. vim打开和关闭的文件

vim file # 文件可以不存在,但文件父目录一定要存在
vim +$ # 打开文件光标处于第$行
vim + # 打开文件,光标处与文件
vim +/pattern # 匹配到第一次被pattern匹配到的行首
关闭文件
末行模式:
wq:保存退出
q:退出
q!:强行退出
w:保存
w!:强行保存
编辑模式:
ZZ:保存退出

3. 移动光标

  1. 逐字符移动(编辑模式)

h:向左
l:向右
j:向下
k:向上
#h:移动#个字符

  1. 逐单词移动

w:移至下一个单词的词首
e:跳至当前或下一个单词的词尾
b:跳至当前或前一个单词的词首
#w:移动#个单词

  1. 行内跳转

0:绝对行首
^:行首的第一个非空白字符
$:绝对行尾

  1. 行间跳转

G:跳转至第#行
G:跳转至最后一行
末行模式下直接输入行号即可

4. 翻屏

ctrl+f:向下翻一屏
ctrl+b:向上翻一屏

ctrl+d:向下翻半屏
ctrl+u:向上翻半屏

5. 删除单个字符

x:删除光标所在处的
#x:删除光标所在处及向后的共#个字符

6. 删除命令:d

需要与跳转命令配合使用
#d跳转符:删除跳转符指定范围#个

末行模式:
startline,endline d
.表示当前行
$:最后一行
+N:向后N行
$-N:倒数N行
最后一次删除的内容被复制到缓冲区里,可以复制或撤回

7. 粘贴命令 p

小写p:如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果删除或复制的内容为非整行,则粘贴至所在字符的后边
大写P:如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果删除或复制的内容为非整行,则粘贴至所在字符的前边

8. 复制命令 y(用法与d相同)

9. 修改 c:先删除内容,再转换为输入模式

10. 替换 r(R进入替换模式)

11. 撤销编辑操作 u

u:撤销前一次的编辑操作
连续u命令可撤销此前的n次编辑操作
#u:撤销最近#次操作
撤销最近一次撤销操作:ctrl+r

12. 重复前一次编辑操作 .

13. 可视化模式

v:按字符选取
V:块状可视化

14. 查找

/PATTERN (从前向后查找)
?PATTERN (从后往前查找)
n 下一个
N 前一个

15. 查找并替换

末行模式
ADDR1,ADDR2s@PATTERN@string@gi (g:全局 i:忽略大小写)

16. 编辑多个文件

vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件
:qa 全部退出

17. 分屏显示一个文件

ctrl+w,s 水平拆分窗口
ctrl+w,v 垂直切割一个文件
在窗口间切换光标
ctrl+w,ARROW
:qa 关闭所有窗口

18. 分窗口编辑多个文件

vim -o:水平分割显示
vim -O:垂直分割显示

19. 将当前文件中部分内容另存为另外一个文件

末行模式:w
ADDR1,ADDR2 w /path/to/somewhere

20. 将另外一个文件的内容填充到当前文件中

:r /path/to/somefile

21. 跟shell交互

:!COMMAND

22. 高级话题

  1. 显示或取消行号

:set number
:set nu
:set nonu

  1. 显示忽略或区分字符大小写

:set ignorecase
:set ic
:set noingorecase

  1. 设置自动缩进

:set autoindent
:set ai
:set noai

  1. 查找到的文本高亮显示或取消

:set hisearch
:set nohisearch

  1. 语法高亮

:syntax on
:syntax off

23. 配置文件

/etc/vimrc 全局配置文件
~/.vimrc 用户配置文件