基本上vi/vim可以分为三种状态,分别是命令模式(command mode)、文本输入模式(Insert mode)和末行模式(last line mode),各模式的功能区分如下:
1) 命令模式(command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式、底行模式下。
2) 文本输入模式(Insert mode)
只有在文本输入模式下,才可以做文字输入,按ESC键可回到命令模式。
3) 末行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号。
在Linux Shell终端下默认执行vim命令,按Enter键后:
- 默认进入命令行模式;
- 在命令行模式按i进入文本输入模式;
- 按ESC进入命令行模式;
- 按 : 进入末行模式。
一、打开文件、保存、关闭文件
:w //保存文件
:q //退出编辑器,如果文件已修改请使用下面的命令
:q! //退出编辑器,且不保存
:wq //退出编辑器,且保存文件:x //保存
二、插入文本或行
a //在当前光标位置的右边添加文本
i //在当前光标位置的左边添加文本
A //在当前行的末尾位置添加文本
I //在当前行的开始处添加文本(非空字符的行首)
O //在当前行的上面新建一行
o //在当前行的下面新建一行
R //替换(覆盖)当前光标位置及后面的若干文本
J //合并光标所在行及下一行为一行(依然在命令模式)
三、vi命令模式下常用参数
yy 复制光标所在行;
nyy 复制n行;
p,P 粘贴;
u 撤消上一次;
U 撤消当前所有;
dd 删除整行,剪切整行;
ndd 删除n行,剪切n行;
gg 快速返回首行
GG 快速返回末行
shift + 6 移动到行首
shift + 4 移动到行末
d$ 删除到行末
d^ 删除到行首
dG 删除从光标所在行到未行
四:末行模式参数
:10000 快速移动到10000行
:s/x/y 替换1行;
1,5s/x/y 替换1,5行;
/word 从前往后找,正向搜索;
?word 从后往前走,反向搜索;
:s/old/new/g 将old替换为new,前提是光标一定要移到那一行;
:%s/old/new/gc 替换时手动替换
#%和不加% :% 代表全局,没有% 代表当前行。
:s/old/new 将这一行中的第一次出现的old替换为new,只替换第一个;
:1,$s/old/new/g 第一行到最后一行中的old替换为new;
:1,100 s/old/new/g 第1行到100行中的old替换为new;
:1,2,3 s/old/new/g 第一行第二行第三行中的old改为new;
:%#25/tcp#26/tcp#gc 使# 进行替换。
其中替换用到斜杠,也可以使用#,@,都可以做替换字符