vi有三种工作模式:一般指令模式(command mode)、编辑模式(insert mode)、指令列命令模式(command-line mode)。
1. 插入命令
命令 | 作用 |
a | 在光标所在字符后面插入 |
A | 在光标所在行尾插入 |
i | 在光标所在字符前插入 |
I(大写i) | 在光标所在行行首插入 |
o | 在光标下插入新行 |
O | 在光标上插入新行 |
上述命令,不仅仅只是将光标移动到指定位置,同时还进入了插入模式(insert mode)。
2. 定位命令
命令 | 作用 |
:set nu[mber] | 设置行号 |
:set nonu[mber] | 取消行号 |
gg G | 到第一行 到最后一行 |
nG | 到第n行 |
:n | 到第n行 |
$ | 移到行尾 |
0 | 移到行首 |
3.删除命令
命令 | 作用 |
x | 删除光标所在处的字符 |
nx | 删除光标所在处后n个字符 |
dd | 删除光标所在行,ndd即删除n行内容 |
dG | 删除光标所在行到文件末尾内容 |
D | 删除光标所在处到行尾的内容 |
:n1,n2d | 删除指定范围的行 |
删除指定范围的行,可先调用“:set nu”查看行号。
4. 复制和剪切命令
命令 | 作用 |
yy | 复制当前行 |
nyy | 复制当前行以下n行 |
dd | 剪切当前行 |
ndd | 剪切当前行以下n行 |
p、P | 粘贴在当前光标所在行下或行上 |
5. 替换和取消
命令 | 作用 |
r | 取代光标所在处字符 |
R | 从光标所在处开始替换字符,按ESC结束 |
u | 取消上一步操作 |
6. 搜索和搜索替换命令
命令 | 作用 |
/string ?string | 向光标之下搜索指定字符串 向光标之上搜索指定字符串 |
n | 搜索指定字符串的下一个出现位置 |
:%s/old/new/g | 全文替换指定字符串 |
:n1,n2s/old/new/g | 在一定范围内替换指定字符串 |
7. 导入命令执行结果
:r 文件名 - 将该文件的内容导入到当前vi正在编辑的文件中。例如,将当前目录下s3.txt文件的内容,导入到当前vi正在编辑的文件s2.txt中。
:! 命令 - 可以在不退出当前vi的情况下执行命令。例如,查看一下当前日期:
:r !命令 - 可以将命令的执行结果,导入到当前vi正在编辑的文件中。例如,在当前文件中,导入date命令的执行结果。
8. 连续行注释
:n1,n2s/^/#/g - 在n1-n2行行首添加注释符号#;
:n1,n2s/^#//g - 去掉n1-n2行行首的注释符号#;
:n1,n2s/^/\/\//g - 在n1-n2行行首添加注释符号//(反斜杠为转义字符);
示例:为当前文件所有行加入注释符号#,输入“:1,$s/^/#/g”。
9. 替换
:ab string1 string2
在vi中 设置完上述命令后,在vi中每次输入string1便会自动转换为string2。例如,输入“:ab mymail apple@126.com”命令之后回车,之后在vi中输入"mymail"便会自动转换为"apple@126.com"。
但是,ab替换功能,在文件关闭之后便失效了。为使得该功能长久有效,需将它定义在用户目录下的vi配置文件.vimrc中。其实,在.vimrc配置文件中,可以设置vi/vim编辑器的很多功能,比如,使vi编辑器一打开就带有行号。