一. VIM的模式
正常模式(按Esc或Ctrl + [进入) :左下角显示 文件名或为空
(不能输入字符)
编辑模式(按i键进入; 按插入命令进入) :
左下角显示 -- INSERT -- (插入)
(从正常模式进入编辑模式)
可视模式(不知道如何进入) :
左下角显示 -- VISUAL -- (可视)
(选择, 拷贝, 粘贴等)
(从正常模式进入可视模式)
二. 打开文件和保存文件
2.1 打开文件
2.2 保存文件
:wq 保存并退出
ZZ 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件。
:w newName 另存为newName
2.3 切换文件窗口
:split file或:new file 用新窗口打开文件(窗口被分割显示)
split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。
Ctrl+ww 移动到下一个窗口(光标跳转到上面命令创建的窗口上)
Ctrl+wj 移动到下方的窗口(光标跳转到上面命令创建的窗口上)
Ctrl+wk 移动到上方的窗口(光标跳转到上面命令创建的窗口上)
三. 光标移动
3.1 字符为单位
l 右移一个字符
k 上移一个字符
j 下移一个字符
以上四个命令可以配合数字使用,
比如20j就是向下移动20行,5h就是向左移动5个字符.
在Vim中,很多命令都可以配合数字使用,比如删除10个字符10x; 在当前位置后插入3个!,3a!<Esc>,这里的Esc是必须的,否则命令不生效。
3.2 单词为单位
b 移动到当前单词首部 (2b 移动到前2个单词首部)
e 移动到当前单词尾部.
ge 移动到上一个单词尾部.
3.3 行为单位
0 : (数字0)移动到本行第一个字符上,
<HOME> : 移动到本行首.
$ : 移动到行尾. 3$ 移动到下面3行的行尾(从当前行开始算)
gg或者[[ : 移动第一行行首
G或者]] : 移动到最后一行行首
冒号+行号+回车 或者 行号+G : 跳到指定行.
3.4 滚动屏幕
滚动屏幕时, 光标所在位置不变
Ctrl + y : 向上滚动一行
Ctrl + d : 向下滚动半屏
Ctrl + u : 向上滚动半屏
Ctrl + f : 向下滚动一屏
Ctrl + b : 向上滚动一屏
四. 插入命令
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
五. 选中, 拷贝, 粘贴, 删除, 剪切, 撤销
5.1 选中
5.2 拷贝
5.2.1 有选中的拷贝
5.2.2 无选中的拷贝
yy 拷贝当前行
nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
ddp 交换当前行和其下一行
xp交换当前字符和其后一个字符
5.3 粘贴
p 在当前光标后粘贴, 如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。
shift + p 在当前行前粘贴
:1,10 co 20 将1-10行插入到第20行之后。(原来1-10行不变)
:1,$ co $ 将整个文件复制一份并添加到文件尾部。
5.4 删除
(此时在普通模式)
x 删除当前字符
nx 删除当前光标开始向后n个字符, 例如 3x
X 删除当前字符的前一个字符。
dl 删除当前字符
dh 删除前一个字符
dd 删除当前行
dj 删除上一行
dk 删除下一行
nd 删除当前行开始的n行, 例如 10d
D或者d$ 删除当前字符至行尾。(包括当前字符)
kdgg 删除当前行之前所有行(不包括当前行)
jdG 删除当前行之后所有行(不包括当前行)
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J 删除两行之间的空行,实际上是合并两行。
5.5 剪切
5.5.1 有选中的剪切
5.5.2 无选中的剪切
:1,10d 将1-10行剪切。
:1,10 m 20 将第1-10行移动到第20行之后. (原来1-10行被剪切掉)
5.6 撤销
Ctrl + r : 重做(Redo)
U : 撤销对整行的操作(不是很明白)
5.7 重复上次的编辑(输入, 剪切, 粘贴, 拷贝)
六. 查找和替换
(此时在普通模式)
6.1 查找
F 同f,反向查找。
(f和F只能找单个字符)
/text + 回车 : 查找text (被找到的文本会高亮显示). 按n健查找下一个, 按N健查找前一个.
?text + 回车 : 查找text(反向查找). 按n健查找下一个, 按N健查找前一个.
查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。
vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$
:set ignorecase 忽略大小写的查找.
:set noignorecase 不忽略大小写的查找.
:set hlsearch 高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配.
:set nohlsearch 关闭高亮搜索显示.
:nohlsearch 关闭当前的高亮显示, 如果再次搜索或者按下n或N键, 则会再次高亮.
:set incsearch 逐步搜索模式, 对当前键入的字符进行搜索而不必等待键入完成.
:set wrapscan 重新搜索, 在搜索到文件头或尾时, 返回继续搜索, 默认开启.
6.2 替换
s/old/new/ 用old替换new,替换当前行的第一个匹配
s/old/new/g 用old替换new,替换当前行的所有匹配
%s/old/new/ 用old替换new,替换所有行的第一个匹配
%s/old/new/g 用old替换new,替换整个文件的所有匹配
:10,20 s/^/ /g 在第10行到第20行每行前面加四个空格,用于缩进。
ddp 交换光标所在行和其下紧邻的一行。