使用对象:
用于编辑任何ASCII文本,对于编辑源程序尤其有用。可以对文本进行创建】查找、替换、删除、复制和粘贴等操作。
三种工作模式
- 命令模式:进入vi编辑器默认处于命令模式。命令模式下控制屏幕光标的移动,字符、字或行的删除,某区域的移动、复制等。在命令模式下,按冒号键【:】可以进入末行模式,按字母【a】键可以进入插入模式。
- 插入模式:只有在插入模式下,才可以进行文本编辑。在插入模式下按【Esc】键可以回到命令模式。
- 末行模式:将文件进行保存或退出vi编辑器,以可以设置编辑环境、替换字符或删除字符。在末行模式下按【Esc】键可以回到命令模式。
进入插入模式命令
| 命令 | 功能 |
| i |
从光标当前所在位置之前开始插入 |
| a |
从光标当前所在位置之后开始插入 |
| I |
在光标所在行的行首插入 |
| A |
在光标所在行的行末尾插入 |
| o |
在光标所在的行的下面新开一行插入 |
| O |
在光标所在的行的上面新开一行插入 |
| s |
删除光标位置的一个字符,然后进入插入模式 |
| S |
删除光标所在的行,然后进入插入模式 |
光标移动
| 命令 | 功能 |
| ↑键(向上箭头) |
使光标向上移动一行 |
| ↓键(向下箭头) |
使光标向下移动一行 |
| ←键(向左箭头) |
使光标向左移动一个字符 |
| →键(向右箭头) |
使光标向右移动一个字符 |
| k |
使光标向上移动一行 |
| j |
使光标向下移动一行 |
| h |
是光标向左移动一个字符 |
| l |
使光标向右移动一个字符 |
| nk |
使光标向上移动n行,n代表数字 |
| nj |
使光标向下移动n行,n代表数字 |
| nh |
使光标向左移动n个字符,n代表数字 |
| nl |
使光标向右移动n个字符,n代表数字 |
| H |
使光标移动到屏幕的顶部 |
| M |
使光标移动到屏幕中央 |
| L |
使光标移动到屏幕底部 |
| Ctrl+b |
使光标往上移动一页屏幕 |
| Ctrl+f |
使光标往下移动一页屏幕 |
| Ctrl+u |
使光标往上移动半页屏幕 |
| Ctrl+d |
使光标往下移动半页屏幕 |
| 0(数字0) |
使光标移动到所在行的行首 |
| $ |
使光标移动到光标所在行的行尾 |
| ^ |
使光标移动到光标所在行的行首 |
| w |
使光标跳到下一个字的开头 |
| W |
使光标跳到下一个字的开头,但会忽略一些标点符号 |
| e |
使光标跳到下一个字的字尾 |
| E |
使光标跳到下一个字的字尾,但会忽略一些标点符号 |
| b |
使光标移回到上一个字的开头 |
| B |
使光标回到上一个字的开头,但会忽略一些标点符号 |
| ( |
使光标移动到上一个句首 |
| ) |
使光标移动到下一个句首 |
| { |
使光标移动到上一个段落首 |
| } |
使光标移动到下一个段落首 |
| G |
使光标移动到文件尾(最后一行的第一个非空白字符处) |
| gg |
使光标移动文件首(第一行第一个非空白字符处) |
| space键(空格键) |
使光标向右移动一个字符 |
| Backspace键 |
使光标向左移动一个字符 |
| Enter键 |
使光标向下移动一行 |
| Ctrl+p |
使光标向上移动一行 |
| Ctrl+n |
使光标向下移动一行 |
| n分隔符 |
使光标移动到n个字符处,n代表数字 |
| nG |
使光标移动到n行首,n代表数字 |
| n+ |
使光标向下移动n行,n代表数字 |
| n- |
使光标向上移动n行,n代表数字 |
| n$ |
使光标移动到以当前行算起的第n行尾,n代表数字 |
命令模式命令
| 类型 | 命令 | 功能 |
| 删除 |
x |
删除光标位置所在的字符 |
| |
X |
删除光标所在位置的前一个字符 |
| |
nx |
删除光标所在位置的第n个字符 |
| |
nX |
删除光标所在为主的前面n个字符,n代表数字 |
| |
dd |
删除光标所在行 |
| |
ndd |
从光标所在行开始删除第n行,n代表数字 |
| |
db |
删除光标所在位置的前面一个单词 |
| |
ndb |
删除光标所在位置的前面n个单词,n代表数字 |
| |
dw |
从光标所在位置开始删除一个单词 |
| |
ndw |
从光标所在位置开始删除n个单词,n代表数字 |
| |
d$ |
删除光标到行尾的内容(含光标所在处字符) |
| |
D |
删除光标到行尾的内容(含光标所在处字符) |
| |
dG |
从光标位置所在行一直删除到文件尾 |
| 复制和粘贴 |
yw |
复制光标所在位置到单词尾的字符 |
| |
nyw |
复制光标所在位置开始的n个单词,n代表数字 |
| |
yy |
复制光标所在行 |
| |
nyy |
复制从光标所在行开始的n行,n代表数字 |
| |
y$ |
复制光标所在位置到行尾内容或缓存区 |
| |
y^ |
复制光标前面所在的位置到行首内容或缓存区 |
| |
YY |
将当前行复制到缓冲区 |
| |
nYY |
将当前开始的n行复制到缓冲区,n代表数字 |
| |
p |
将缓冲区的内容写到光标所在的位置 |
| 替换 |
r |
替换光标所在处的字符,按【r】键以后输入要替换的字符 |
| |
R |
替换光标所到之处的字符,直到按下【Esc】键为止,【R】键之后输入要替换的字符 |
| 撤销和重复 |
u |
撤销上一个操作。按多次【u】可以执行多次撤销 |
| |
U |
取消所有操作 |
| |
. |
再执行一次前面刚完成的操作 |
| 列出行号 |
Ctrl+g |
列出光标所在行的行号 |
| 保存和退出 |
ZZ |
保存和退出 |
| |
ZQ |
不保存退出 |
| 查找字符 |
/关键字 |
先按【/】键,再输入想查找的字符,如果第一次查找的关键字不是想要的,可以一直按【n】键往后查找下一个关键字,而按【N】键则会往相反的方向查找。 |
| |
?关键字 |
先按【?】键,再输入想查找的字符,如果第一次查找的关键字不是想要的,可以一直按【n】往前查找下一个关键字,而按【N】键会往相反方向查找 |
| 合并 |
nJ |
将当前行开始的n行进行合并,n代表数字 |
| |
J |
清除光标所在行与下一行之间的换行,行尾没有空格的话会自动添加一个空格 |
末行模式命令
| 类型 | 命令 | 功能 |
| 运行Shell命令 |
:!command |
运行Shell命令,command代表命令 |
| |
:r!command |
将命令运行的结果信息输入到当前位置,command代表命令 |
| |
:n1,n2w!command |
将n1到n2行的内容作为命令的输入,n1和n2代表数字,command代表命令 |
| 查找字符 |
:/str/ |
从当前光标开始往右移动到有str的地方,str代表字符 |
| |
:?str? |
从当前贵宾卡i是往左移动到有str的地方,str代表字符 |
| 替换字符 |
:s/str1/str2 |
将光标所在行第一个字符str1替换为str2,str1和str2代表字符 |
| |
:s/str1/str2/g |
将光标所在行所有的字符str1替换为str2,str1和str2代表字符 |
| |
:n1,n2s/str1/str2/g |
用str2替换从第n1行到第n2行中出现的str1,str1和str2代表字符,n1和n2代表数字 |
| |
:%s/str1/str2/g |
用str2替换文件中所有的str1,str1和str2代表字符 |
| |
:.,$s/str1/str2/g |
将从当前位置到结尾的所有的str1替换为str2,str1和str2代表字符 |
| 保持和退出 |
:w |
保持文件 |
| |
:w filename |
将文件另存为filename |
| |
:wq |
保持文件并退出vi编辑器 |
| |
:wq filename |
将文件另存为filenam后退出vi编辑器 |
| |
:wq! |
保存文件并强制退出vi编辑器 |
| |
:wq! filename |
将文件另存为filename后强制退出vi编辑器 |
| |
:x |
保存文件并强制退出vi编辑器,其功能和:wq!相同 |
| |
:q |
退出vi编辑器 |
| |
:q! |
如果无法离开vi,强制退出vi编辑器 |
| |
:n1,n2w filename |
将从n1行开始到n2行结束的内容保持到文件filename中,n1和n2代表数字 |
| |
:nw filename |
将第n行内容保持到文件filename中,n代表数字 |
| |
:1,.w filename |
从第一行开始到光标当前位置的所有内容保持到文件filename中 |
| |
:.,$w filename |
将光标当前位置到文件末尾的所有内容保持到文件filename中 |
| |
:r filename |
打开另外一个已经存在的文件filename |
| |
:e filename |
新建名为filename的文件 |
| |
:f filename |
把当前文件改为filename文件 |
| |
:/str/w filename |
将包含有str的行写到文件filename中,str代表字符 |
| |
:/str1/,/str2/w filename |
将从包含有str1开始到str2结束的行内容写入到文件filename中,str1和str2代表字符 |
| 删除 |
:d |
删除当前行 |
| |
:nd |
删除第n行,n代表数字 |
| |
:n1,n2 d |
删除从n1行开始到n2行为止的所有内容,n1和n2代表数字 |
| |
:.,$d |
删除从当前行开始到文件末尾的所有内容 |
| |
:/str2/,/str2/d |
删除从str1开始到str2为止的所在行的所有内容,str1和str2代表字符 |
| 复制和移动 |
:n1,n2 co n3 |
将从n1行开始到n2行为止的所有内容复制到n3行后面,n1、n2和n3代表数字 |
| |
:n1,n2 m n3 |
将从n1行开始到n2行为止的所有内容移动到n3行后面,n1、n2和n3代表数字 |
| 跳到某一行 |
:n |
在冒号后输入一个数字,再按回车键就会跳到该行,n代表数字 |
| 设置vi环境 |
:set number |
在文件中的每一行前面列出行号 |
| |
:set nonumber |
取消在文件中的每一行前面列出行号 |
| |
:set readonly |
设置文件为只读状态 |
摘自:《Linux实用教程》人民邮电出版社出版发行 於岳编著