# [email protected]
# 如果文档中有错误的,请告诉我,发送到我的邮箱
移动光标
左 h 5h表示向左移动5个字符,依此类推
下 j
上 k
右 l
移动到单词的结尾(符号与标点也算一个单词) e
移动到单词的结尾 E
移动到一行的开头 0(数字零)
移动到一行的结尾 $
移动一个单词(符号与标点也算一个单词) w 前面可以加数字
移动一个单词 W
后退一个单词(符号与标点也算一个单词) b
后退一个单词 B
移动到顶行 gg
移动到尾行 G
移动到指定的行 55g
回到原来的位置,即上一次G命令所在的位置 ``
回到原来的位置行的行首,即上一次G命令所在的位置的行首 ''
保存/不保存/写入/读取/数据
ZZ
:w
:w /path/to/file
:wq
:x
:q
:q!
:r /path/to/file
大小写转换
~ 小写的转换为大写,大写的转换为小写
编辑命令
插入数据
i 在当前光标前插入数据
50iA 会插入50个A字符
I 在当前行首插入数据
a 在当前光标后插入数据
A 在当前行尾插入数据
o 在当前行的下一行插入数据
O 在当前行的上一行插入数据
更改数据
cw 从光标到这个单词的结尾
c2b 从光标往前两个单词
c$ 从光标到本行的结尾
C 与c$的效果一样
c0 从光标到本行的行首(数字零)
cc 更改当前行的所有数据
r 更改光标所在的一个字符
R 更改光标所在行的所有字符
替换文本
s 替换光标所在的一个字符
S 替换光标所在行的所有字符
删除数据
dd 删除当前行的数据
2dd 删除当前行和下一行的数据
dw 删除光标后的一个单词(符号与标点都算一个单词)
2dw 删除光标后的两个单词
db 删除光标前的一个单词
d2b 删除光标前的两个单词
d$ 删除光标到行尾的所有数据
D 与d$一样的效果
d0 删除光标到行首的所有数据(数字零)
x 删除光标所在的一个字符
2x 删除光标后的两个字符
撤销操作
u 撤销到上一次的操作
U 撤销当前行的所有操作,还原到最原始的状态,只要光标还在这一行即可,一旦移动到别的行,就不可以使用了
复制数据
yy 复制当前行
yw 复制一个单词(符号与标点都算)
y$ 复制光标到行尾的数据
y0 复制光标到行首的数据(数字零)
3yy 复制当前行和下两行
粘贴数据
p 在当前行的光标后面粘贴数据
P 在当前行的光标前面粘贴数据
重复命令
. 重复上一次操作的命令
查找命令
/world 向下匹配所有的world单词
?woeld 向上匹配所有的world单词
n 向上查找world单词
N 向下查找world单词
:set nowrapscan 禁止向上查找单词
:/world/d 删除下一个匹配到world的行
快速移动位置
Ctrl+f 往下滚动一整屏
Crtl+b 往上滚动一整屏
Crtl+d 往下滚动半屏
Crtl+u 往上滚动半屏
Crtl+e 往上滚动一行
Crtl+y 往下滚动一行
H 移动到屏幕顶端的行首
M 移动到屏幕中央的行首
L 移动到屏幕底端的行首
5H 移动到屏幕顶端往下的5行
5L 移动到屏幕底端往上的5行
回车 移动到下一行的第一个字符
+ 移动到下一行的第一个字符
- 移动到上一行的第一个字符
^ 移动到当前行的第一个非空格处
5| 移动到当前行的第5列
fx 光标会移动到下一个x字符的位置
f2x 光标会移动到下两个x字符的位置
dfx 删除光标到下一个x字符之间的所有内容
Fx 光标会移动到上一个x字符的位置
tx 光标会移动到下一个x字符的前一个字符
Tx 光标会移动到上一个x字符的后一个字符
cH 从光标到屏幕顶端
cL 从光标到屏幕底端
c+ 从光标到下一行
c5| 从行首到后面的第5个字符
c/world 匹配到的world
cn 从光标到下一个模式
cG 从光标到文件结尾
c13G 从光标到第13行,比如当前光标在第15行,会更改第13行到第15行的内容
dH 从光标到屏幕顶端
dL 从光标到屏幕底端
d+ 从光标到下一行
d5| 从行首到后面的第5个
d/world 匹配到的world
dn 从光标到下一个模式
dG 从光标到文件结尾
d13G 从光标到第13行,比如当前光标在第15行,会删除第13行到第15行的内容
yH 从光标到屏幕顶端
yL 从光标到屏幕底端
y+ 从光标到下一行
y5| 从行首到后面的第5个
y/world 匹配到的world
yn 从光标到下一个模式
yG 从光标到文件结尾
y13G 从光标到第13行,比如当前光标在第15行,会更改第13行到第15行的内容
缓冲区
a-z 命名的缓冲区名称a-z,大写字母表示附加到缓冲区现有的内容后
1-9 最近9次删除操作的内容,从最后一次到最先一次
"b command 用缓冲区b执行命令
"dyy 将当前行拖拽到缓冲区d中
"Dyy 将当前行追加到缓冲区d中
"a7yy 将后续七行拖拽到缓冲区a中
"a5dd 将删除的五行拖拽到缓冲区a中
"A5dd 将删除的五行追加到缓冲区a中
"dp 将缓冲区d的内容放置到光标前
"ap 将缓冲区a的内容放置到光标后
vim +5 1.txt 在第5行打开1.txt
vim + 1.txt 在最后以后打开1.txt
vim +/world 1.txt 在第一个出现world的地方打开1.txt
vim -R 1.txt 只读模式打开文件
view 1.txt 只读模式打开文件
vim -r 将得到系统保存下来的所有文件列表
vim -r 1.txt 可以恢复系统死机时1.txt文件的编辑缓冲区
vim -c command 1.txt 在打开文件后执行命令;通常是行号或搜索模式(POSIX版的是+)
恢复删除
p 把删除的内容粘贴至当前位置
mx 将当前位置标记成x
'x 将光标移到到标记x所在行的行首
`x 将光标移到以x标记的字符
`` 在移动位置之后,回到上一个标记或上下文的确切位置
'' 回到上一个标记或上下文所在行的开头
ex命令
:6 移动到第6行
:1p 移动到第1行并将内容打印到屏幕上
:1,3p 将第1行到第3行的内容打印到屏幕上
:1 s/world/hello/ 将第1行的world替换为hello
:d 删除当前行
:3,18d 删除第3行到第18行
:m 1 移动当前行到第一行的后面
:3,18m20 将第3行到第18行的内容移动到第20行之后
:co 1 复制当前行到第一行的后面
:3,18co20 将第3行到第18行的内容复制到第20行之后
:t 1 复制行(与co同义)
:set number 显示行号 :set nu
:set nonumber 取消行号 :set nonu
:1,10# 显示第1行到第10行的行号
:= 显示总行数
:.= 显示当前行的行号
:/world/= 显示光标之后world第一次出现时的行号
:.,$d 删除当前行到文件结尾的内容
:2,.m$ 将第2行到当前行这一行间的内容移动到文件结尾
:%d 删除文件中所有的行
:%t$ 将所有的行复制到文件结尾
:.,+20d 删除当前行到下面20行之间的文本
:.,+20# 显示当前这一行及向下20行之间的行号
如果后面没有接着数值,+与-分别等于+1与-1。同样地,++与--分别可将范围增加一行。
:/world/d 删除下一个包含world的行
:/world/+d 删除下一个包含world的行的下一行
:/world1/,/world2/d 删除下一个包含world1的行到第一个包含world2的行
:.,/world/m23 将当前行到第一个包含world的行之间的文本放置到第23行之后
:100,+5 p 打印第100行与它下面的5行 :100;+5 p
:/world/,+10 p 打印下一个包含world的行与它下面的10行
:g/world 寻找到文件中最后一次出现world的地方,并显示文件中所有包含world的行 或:g/world/p
:g!/world/nu 寻找并显示文件中所有不包含world的行,也显示所有找到的行号
:60,100g/world/p 寻找并显示第60行到第100行之间包含world的行
:1,3d | s/world/hello/ 删除第1行到第3行,接着在当前行做替换
:1,5 m 10 | g/world/nu 将第1行到第5行移动到第10行之后,接着显示所有包含world的行的行号
:100,$w 1.txt 将第100行到文件结尾的内容保存到1.txt文件中
:.,100w 1.txt 将当前行到第100行的内容保存到1.txt文件中
:200,$w >>1.txt 将第200行到文件结尾的内容追加到1.txt的尾部
:r 2.txt 将2.txt文件中的内容读入到当前文件的光标之后
:100r 2.txt 在第100行之后读入2.txt文件的内容
:$r 2.txt 在文件结尾读入2.txt文件的内容
:0r 2.txt 在文件开头读入2.txt文件的内容
:/world/r 2.txt 在第一个出现world的行之后读入2.txt文件
vim编辑器的命令模式输入Q会调用ex编辑器,输入vi即可回到vim编辑器
使用vim打开两个文件
vim file1 file2
在vim中切换文件
Crtl+^
将file1中的内容复制到file2中
"f4yy 将4行内容复制到缓冲区f中
:w 保存文件
:e file2 进入file2文件
"fp 从命名缓冲区f中粘贴内容到光标处
vim替换命令
:s/old/new/ 将第一个出现的old替换为new
:s/old/new/2 将第二个出现的old替换为new
:s/old/new/g 将所有的old替换为new
:.,+5 s/old/new/ 从当前行开始到下面的五行进行替换
:100,200s/old/new/g 将第100行到第200行之间的old替换为new
:1,$s/old/new/g 将第1行到最后一行的old替换为new
:1,30s/old/new/gc c表示是确认的意思confirm
:%s/old/new/g 将文件中所有的old替换为new
:g/world/s/old/new/g 将包含world的行并将old替换为new
:g/world/s//new/g 将包含world的行的world替换为new :%s/world/new/g
正则表达式
元字符
. 匹配任何单个字符,换行符除外
* 匹配前一个字符零到任意次
^ 匹配一行的开头
$ 匹配一行的结尾
\ 转义符
[] 匹配方括号里面的任何一个字符
[^] 跟[]正好相反
\(\) 将括号内的的模式保存到特殊的空间(保留缓冲区),可以保存任意一行中的9个模式
\<\> 精确匹配
~ 匹配任何上一次搜索时所使用的正则表达式,例如,搜索过the,边可以使用/~n来搜索then
字符类型
[:alnum:] 字母与数字字符
还有很多,自己去查吧,我这里就不列出来了。
.....
替换字符串
\1 将\(\)匹配到的内容引用到此
\. 将.进行转义
& 会替换成搜索模式匹配到的完整文本 :s/world/hello,&/g:将world替换为hello,world
\u或\l 使替换字符串中的下一个字符变成大写或小写 :s/world/\u&/g 将world替换为World
\U或\L或\e或\E 将匹配到所有字符串变成大写或小写,一直到替换字符串结束,或出现\e或\E为止 :s/world/\U&/g 将world替换为WORLD
:s//~/ 重复上一次替换
:%&g 在所有地方重复上一个替换
&键可以被当成vi命令,:&命令(重复上一个替换)
:~命令与:&相似,只能用来搜索的模式是上一个出现的正则表达式,而不一定是上一个替换命令中的正则表达式
例子:
:s/old/new/g
:/green
:~ 等于:s/green/new/g