vim有4个模式:命令模式、插入模式、底行模式、可视模式。
光标移动:
gg:是让光标移到首行,在vim才有效,vi中无效
G :光标移到最后一行
H左、J下、K上、L右 或者 方向键进行选中
各模式下的常用操作:
命令模式(command mode):可以移动光标、删除字符等。
插入模式(insert mode):在此模式下进行文件编辑、修改、输入等操作。
末行模式(last line mode):可以保存文件、退出vi、设置vi、查找等功能
可视模式(visual mode):在此模式下可选中进行复制、删除、剪切等操作
如何进入各模式
命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外三种模式,同时无论在任何模式下只要按一下
[Esc]键都可以返回命令模式。
输入模式:在命令模式下按'i'可进入输入模式。
末行模式:在命令模式输入':'即可进入该模式。
可视模式:在命令模式下,有三种方式进入该模式
1)小v进入visual模式,任意选中
2)大V进入visual line模式,行为单位选中
3)ctrl+v进入visual block模式,可以根据列进行选中,d剪切、y复制、p粘贴
命令模式下的操作:
1)删除操作
x:删除光标处的单个字符
dd;删除光标所在行
dw:删除当前字符到单词尾包括空格的所有字符
#x:3x删除光标处向右的三个字符
#dd:3dd从当前行开始向下删除三行文本
ggdG:删除所有内容。
dgg:从开始位置删除到光标所占行。
dG:删除光标所在行到结尾。
2)撤销操作
u命令取消最近一次的操作,可以使用多次来恢复原有的操作
U取消所有操作
Ctrl+R可以恢复对使用u命令的操作
3)复制操作
yy命令复制当前整行的内容到vi缓冲区
yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词
y$复制光标所在位置到行尾内容到缓存区
y^复制光标所在位置到行首内容到缓存区
#yy例如:5yy就是复制5行
#yw例如:2yw就是复制两个单词
4)粘贴
p小:将已复制的数据在光标下一行粘贴上
P大:则为贴在光标的上一行
5)查找
/pattern:回车,从光标位置开始向下查找
n继续向下查找,N向上查找
?pattern:回车,从光标位置开始想上查找
n继续向上查找,N向下查找
pattern是需要匹配的字符串,例如:
/hello<Enter> #查找hello
/hello<Enter> #查找hello单词(注意前后的空格)
除此之外,pattern还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。
/^hello<Enter> #查找以hello开始的行
/hello$<Enter> #查找以hello结束的行
//^hello<Enter> #查找^hello字符串
底行模式下的操作
1)退出
【:w】保存不退出
【:q】不保存退出
【:wq】保存退出
【:x】保存退出
【:q!】不保存强制退出
【:wq!】保存强制退出
2)显示行号,取消行号
:set nu
:set nonu
3)查看编码
:set fileencoding
4)替换
:[range]s/pattern/string/[c,e,g,i]
range 指的是范围,1,7 指从第一行至第七行,1,$ 指从第一行至最后一行,也就是整篇文章,也可以 % 代表。 % 是目前编辑的文章,# 是前一次编辑的文章。
pattern 就是要被替换掉的字串,可以用 regexp 来表示。
string 将 pattern 由 string 所取代。
c confirm,每次替换前会询问。
e 不显示 error。
g globe,不询问,整行替换。
i ignore 不分大小写。
I ignore 大小写敏感。
示例
:s/oldstr/newstr/ #替换当前行第一个为oldstr为newstr
:s/oldstr/newstr/g #替换当前行所有oldstr为newstr
:n,$s/oldstr/newstr/ #替换第 n 行开始到最后一行中每一行的第一个oldstr为newstr
:n,$s/oldstr/newstr/g #替换第 n 行开始到最后一行中每一行所有oldstr为newstr
#(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/oldstr/newstr/ #(等同于 :g/lantian/s//sky/)替换每一行的第一个oldstr为newstr
:%s/oldstr/newstr/g #(等同于 :g/lantian/s//sky/g) 替换每一行中所有oldstr为newstr
:s#lantian/#sky/# 替换当前行第一个oldstr/为newstr/,可以使用 #或+ 作为分隔符,此时中间出现的 / 不会作为分隔符
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
恢复文件
vi在编辑某一个文件时,会生成一个临时文件,这个文件以 . 开头并以 .swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,
该文件不会删除,我们在下次编辑时可以选择一下命令处理:
O只读打开,不改变文件内容
E继续编辑文件,不恢复.swp文件保存的内容
R将恢复上次编辑以后未保存文件内容
Q退出vi
D删除.swp文件
或者使用vi -r 文件名来恢复未保存的内容
相关文档:
https://www.cnblogs.com/luosongchao/p/3193153.html
https://www.cnblogs.com/logsharing/articles/8182850.html