1. vim模式
在这里插入代码片正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
插入模式(按i进入) 左下角显示--INSERT--
可视模式(按v进入) 左下角显示--VISUAL--
2. 打开文件
# 打开单个文件
vim file
# 同时打开多个文件
vim file1 file2..
# 在vim窗口中打开一个新文件
:open [file]
【举个例子】
# 当前打开1.txt,做了一些编辑没保存
:open! 放弃这些修改,并重新打开未修改的文件
# 当前打开1.txt,做了一些编辑并保存
:open 2.txt 直接退出对1.txt的编辑,直接打开2.txt编辑,省了退出:wq再重新vim 2.txt的步骤
# 打开远程文件,比如ftp或者share folder
:e ftp://192.168.10.76/abc.txt
:e \qadrive\test\1.txt
# 以只读形式打开文件,但是仍然可以使用 :wq! 写入
vim -R file
# 强制性关闭修改功能,无法使用 :wq! 写入
vim -M file
3. 插入命令
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
4. 查找命令
/text 查找text,按n健查找下一个,按N健查找前一个。
?text 查找text,反向查找,按n健查找下一个,按N健查找前一个。
vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$
:set ignorecase 忽略大小写的查找
:set noignorecase 不忽略大小写的查找
快速查找,不需要手打字符即可查找
* 向后(下)寻找游标所在处的单词
# 向前(上)寻找游标所在处的单词
以上两种查找,n,N 的继续查找命令依然可以适用
5. 替换命令
~ 反转游标字母大小写
r<字母> 将当前字符替换为所写字母
R<字母><字母>... 连续替换字母
cc 替换整行(就是删除当前行,并在下一行插入)
cw 替换一个单词(就是删除一个单词,就进入插入模式),前提是游标处于单词第一个字母(可用b定位)
C (大写C)替换至行尾(和D有所区别,D是删除(剪切)至行尾,C是删除至行位并进入插入模式)
:s/old/new/ 用old替换new,替换当前行的第一个匹配
:s/old/new/g 用old替换new,替换当前行的所有匹配
:%s/old/new/ 用old替换new,替换所有行的第一个匹配
:%s/old/new/g 用old替换new,替换整个文件的所有匹配
ddp 交换光标所在行和其下紧邻的一行。
6. 撤销与重做
u 撤销(Undo)
U 撤销对整行的操作
7. 删除命令
需要说明的是,vim 其实并没有单纯的删除命令,下面你理解为剪切更加准确。
以字符为单位删除
x 删除当前字符
3x 删除当前字符3次
X 删除当前字符的前一个字符。
3X 删除当前光标向前三个字符
dl 删除当前字符, dl=x
dh 删除前一个字符,X=dh
D 删除当前字符至行尾。D=d$
d$ 删除当前字符至行尾
d^ 删除当前字符之前至行首
以单词为单位删除
dw 删除当前字符到单词尾
daw 删除当前字符所在单词
以行为单位删除
dd 删除当前行
dj 删除下一行
dk 删除上一行
dgg 删除当前行至文档首部
d1G 删除当前行至文档首部
dG 删除当前行至文档尾部
kdgg 删除当前行之前所有行(不包括当前行)
jdG 删除当前行之后所有行(不包括当前行)
10d 删除当前行开始的10行。
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J 删除两行之间的空行,实际上是合并两行。
8. 复制粘贴
普通模式中使用y复制
yy 复制游标所在的整行(3yy表示复制3行)
y^ 复制至行首,或y0。不含光标所在处字符。
y$ 复制至行尾。含光标所在处字符。
yw 复制一个单词。
y2w 复制两个单词。
yG 复制至文本末。
y1G 复制至文本开头。
普通模式中使用p粘贴
p(小写):代表粘贴至光标后(下边,右边)
P(大写):代表粘贴至光标前(上边,左边)
9. 剪切粘贴
dd 其实就是剪切命令,剪切当前行
ddp 剪切当前行并粘贴,可实现当前行和下一行调换位置
正常模式下按v(逐字)或V(逐行)进入可视模式
然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
:1, 10 m 20 将第1-10行移动到第20行之后。
10. 退出保存
:wq 保存并退出
ZZ 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件。
ZZ 保存并退出
:sav(eas) new.txt 另存为一个新文件,退出原文件的编辑且不会保存
:f(ile) new.txt 新开一个文件,并不保存,退出原文件的编辑且不会保存
11. 移动命令
以字符为单位移动
h 左移一个字符
l 右移一个字符
k 上移一个字符
j 下移一个字符
# 【定位字符】f和F
fx 找到光标后第一个为x的字符
3fd 找到光标后第三个为d的字符
F 同f,反向查找。
以行为单位移动
# 10指代所有数字,可任意指定
10h 左移10个字符
10l 右移10个字符
10k 上移10行
10j 下移10行
$ 移动到行尾
3$ 移动到下面3行的行尾
以单词为单位移动
w 向前移动一个单词(光标停在单词首部)
b 向后移动一个单词
e,同w,只不过是光标停在单词尾部
ge 同b,光标停在单词尾部。
跳转到文件的首尾
gg 移动到文件头。 = [[ == ``
G 移动到文件尾。 = ]]
其他移动方法
^ 移动到本行第一个非空白字符上。
0 移动到本行第一个字符上(可以是空格)