简介
UNIX操作系统自带的默认编辑器称为vi (visual editor)。
UNIX环境的备选编辑器包括pico和emacs,是GNU产品。
UNIX vi编辑器是一个全屏编辑器,有2种操作模式:
- 命令模式 – 键盘输入命令
- 插入模式 – 键盘输入文字
命令模式下,键入的字符都是命令,会对正在编辑的文件执行某些操作,有些命令可把vi编辑器切换到插入模式。在插入模式下,输入的每个字符都被添加到文件中;按下 (Escape)键将退出插入模式,回到命令模式。
虽然vi有许多命令,但对初学者来说,通常只需学习一小部分就够了。在下面的介绍中,对于最常用的命令都会标出来。
注意: UNIX和vi都是区分大小写的,确保不要搞混。
启动/退出vi
启动vi
如要用vi编辑文件,执行命令vi 文件名
,打开文件编辑窗口。如果文件不存在,则创建一个空文件。
常用 | vi filename | 编辑文件(filename) |
---|---|---|
vi -r filename | 恢复系统崩溃时正在编辑的文件(filename) | |
退出vi
退出vi时,一般都会保存文件,当然也可不保存直接退出。
注意:只要键入冒号(:),光标就会移动到屏幕底部,在那里可以输入命令,回车执行。
常用 | :x<回车> | 退出vi,保存文件 |
---|---|---|
:wq<回车> | 退出vi,保存文件 | |
:q<回车> | 退出vi | |
常用 | :q!<回车> | 退出vi,不保存文件 |
移动光标
vi中不能使用鼠标移动光标,只能使用键盘,如下表所示:
常用 | j / 回车 / 下箭头键 | 下 |
---|---|---|
常用 | k / 上箭头键 | 上 |
常用 | h / 删除键 / 左箭头键 | 左 |
常用 | l / 空格键 / 右箭头键 | 右 |
常用 | 0 (零) | 将光标移动到当前行(有光标的行)的开头 |
常用 | $ | 将光标移到当前行的末尾 |
w | 将光标移到下一个单词的开头 | |
b | 将光标移回前一个单词的开头 | |
:0<回车> / 1G | 将光标移到文件的第一行 | |
:n<回车> / nG | 将光标移到第n行 | |
:$<回车> / G | 将光标移到文件的最后一行 | |
屏幕处理
以下命令允许vi编辑器屏幕向上或向下移动几行并刷新。
Ctrl + f | 向前滚动一个屏幕 | |
---|---|---|
Ctrl + b | 向后滚动一个屏幕 | |
Ctrl + d | 向下(向前)移动半个屏幕 | |
Ctrl + u | 向上(向后)移动半个屏幕 | |
Ctrl + l | 屏幕重绘 | |
Ctrl + r | 重绘屏幕,擦除被删行 | |
添加、更改和删除文本
vi撤销操作,只能撤销最后一步
常用 | u | 撤销最后一步操作 |
---|---|---|
插入或添加文本
下面的命令可把vi编辑器切换到插入模式,按ESC键可以退出插入模式,回到命令模式。
常用 | i | 在光标前插入文本 |
---|---|---|
I | 在当前行开始插入文本 | |
常用 | a | 在光标后面追加文本 |
A | 将文本追加到当前行的末尾 | |
常用 | o | 当前行后面新起一行,开始插入文本 |
常用 | O | 当前行前面新起一行,开始插入文本 |
修改文本
常用 | r | 替换光标下的单个字符,替换完后不会进入插入模式 |
---|---|---|
R | 从当前光标位置开始替换字符,按ESC结束 | |
cw | 从光标下的字符开始用新文本更改当前单词,按ESC结束 | |
cNw | 在光标下改变N个以字符开头的单词,按ESC结束;例如,c5w改变了5个单词 | |
C | 更改(替换)当前行中的字符,按ESC结束 | |
cc | 更改(替换)整个当前行,按ESC结束 | |
Ncc / cNc | 改变(替换)从当前行接下来下N行,按ESC结束 | |
删除
常用 | x | 删除光标下的单个字符 |
---|---|---|
Nx | 删除N个字符,从光标下的字符开始 | |
dw | 删除以光标下字符开头的单个单词 | |
dNw | 删除以光标下字符开头的N个单词; 例如,d5w删除了5个单词 |
|
D | 从当前光标位置开始删除行中剩余的部分 | |
常用 | dd | 删除整个当前行 |
Ndd / dNd | 删除N行,从当前行开始; 例如,5dd删除5行 |
|
剪切和粘贴文本
yy | 将当前行复制到缓冲区中 | |
---|---|---|
Nyy / yNy | 将后面N行(包括当前行)复制到缓冲区中 | |
p | 将缓冲区中的行粘贴到当前行之后的文本中 | |
其他命令
搜索文本
搜索替换是一个常见操作,可以用以下命令搜索文本
/string | 向前搜索字符串 | |
---|---|---|
?string | 向后搜索字符串 | |
n | 搜索时,移动到下一个匹配 | |
N | 搜索时,移动到反方向的下一个匹配 | |
确定行号
有时需要确定当前行数或文件总行数。
:.= | 屏幕底部显示当前行的行号 | |
---|---|---|
:= | 屏幕底部显示文件总行数 | |
Ctrl + g | 屏幕底部显示当前行的行号与文件总行数 | |
保存和读取文件
:r filename<回车> | 读取名为filename的文件,并在当前行之后插入 | |
---|---|---|
:w<回车> | 保存文件 |
|
:w newfile<回车> | 另存为名为newfile的新文件 | |
:12,35w smallfile<回车> | 将编号为12到35行的内容另存为名为smallfile的新文件 | |
:w! prevfile<回车> | 在预先存在的名为prevfile的文件上写入当前内容 | |