参考总结自:
https://blog.csdn.net/qq_39147299/article/details/108972206
https://www.cnblogs.com/mabingxue/p/10281132.html
https://zhidao.baidu.com/question/277761048.html
使用vi 打开文件时,默认是命令行模式(普通),编辑模式、尾行模式的切换都需要经过命令行模式。
默认打开文件是为命令行模式,从其他模式按一次或多次ESC返回到命令行模式。
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi n filename :打开文件,并将光标置于第n行首
vi /pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑
在命令模式下,从键盘上输入的任何字符都被当作编辑命令来解释,如果输入的字符是合法的vi命令,则vi就会完成相应的动作;否则vi会响铃警告。
命令行模式光标移动
H J K L
左 下 上 右
命令行模式下的快捷命令
gg、G
gg是回到第一行,G是回到最后一行,nG是去到指定的第n行。
如果想要回到第20行,那就 " 20G "
dd 剪切(删除)光标所在行
如果想要删除20行,那就 " 20dd "
d1G、dG
d1G是删除当前行前面的所有数据,dG是删除当前行之后的全部数据
x、X
x是删除下一个字符,X是删除上一个字符
如果想删除10个字符,那就" 10x "
yy 复制光标所在行
如果想要复制20行,那就 " 20yy "
y1G、yG
y1G是复制当前行前面的所有数据,yG是复制当前行之后的全部数据
p、P p是粘贴到下一行,P是粘贴到上一行。3p就是重复粘贴三次。
u 撤销上一步操作,uuu撤销三步操作…
Ctrl+r 反撤销
w 光标移动到下一个单词首部(每个标点符号算一个单词)。w可以结合其他命令一起使用,如yw复制单词,dw、cw
e 光标移动到下一个单词尾部
b 光标回到上一次停留的单词处
dw 删除光标所在的一个单词
cw 改变一个单词
.(小数点) 重复上一个动作
从命令行进入编辑模式:
从编辑模式回到命令行模式只需要一次ESC。
从命令行模式进入尾行模式需要按 shift+冒号/分号。可以使用命令保存、替换、退出、显示行号等等;
也可以使用/ 进入尾行模式并搜索内容。
尾行模式的操作命令:
:w 将编辑过的文本保存
:w! 强制保存
:q 退出vim
:q! 不保存退出。 (或直接命令行模式下的 ZQ)
:wq 保存并退出 。(或直接命令行模式下的 ZZ)
:w [filename] 文档另存为filename
:r [filename] 在当前光标所在行的下面读入filename文档的内容
:n1,n2 w [filename] 将n1到n2的内容另存为filename这个文档
:e! 放弃所有修改,从上次保存文件开始再编辑
:! [command] 暂时离开vim并运行某个linux命令
:set nu 显示行号 (也可以在vim永久配置set number)
:set relativenumber 显示相对行号
:set nonu 取消显示行号
:/搜索的文本 ,搜索到的内容会高亮显示
:%s/要替换的字符/替换后的字符/g ,全局替换文本
tips:
实现将文件的最后一行删除,可以不经过编辑模式:全程在命令行模式下,按G去到最后一行,按dG是删除当前行以及之后行,按 ZZ保存并退出。
在尾行模式执行完命令,或两次ESC就能回到命令行模式。
从命令行模式进入视觉模式
命令行模式输入v、V、Ctrl+v 就进入视觉模式,同时移动光标(方向键或hjkl都可以)就能选中对应的区域
选中的文本可以使用d删除。
vi在编辑某一个文件时,会生成一个临时文件,这个文件以 . 开头并以 .swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,该文件不会删除,我们在下次编辑时可以选择一下命令处理:
O只读打开,不改变文件内容
E继续编辑文件,不恢复.swp文件保存的内容
R将恢复上次编辑以后未保存文件内容
Q退出vi
D删除.swp文件
或者使用vi -r 文件名来恢复未保存的内容