1.1 进入vi
vi | 对一个无文件名的文件进行操作 |
vi filename | 1. 如果文件不存在,则新建一个文件,光标停留在屏幕的左上角; 2. 如果文件存在,则编辑该文件,将文件的内容读入编辑缓冲区,并在屏幕中显示文件的内容;状态指示行显示正在编辑的文件名、行数和字符数;若文件的内容不足一屏时,屏幕的下方以字符“~”开头的行补齐;以“~”开头的行表示空行。 |
vi +n file | n指定光标在文件上停留处的行号 |
vi +/string file | 光标停在文件中第一次出现指定字符串string的那一行的行首 |
1.2 退出vi
:wq | 保存文件并退出。把编辑缓冲区的内容写回文件,并退出vi编辑环境; |
:ZZ | 1. 有修改时才将编辑缓冲区的内容写回文件,并退出vi编辑环境; 2. 未修改过文件时,将编辑缓冲区的内容丢弃,无写文件操作,直接退出vi编辑环境; |
:x | 1. 修改过文件时,将编辑缓冲区的内容写回文件,并退出vi编辑环境; 2. 未修改过文件是,将编辑缓冲区的内容丢弃,无写文件操作,直接退出vi编辑环境; |
:q ! | 不保存文件并退出 |
:w[filename] | 将编辑的数据保存成另一个文件,相当于另存为 |
:r | 在编辑的数据中,读入另一个文件的数据,即将“filename”这个文件内容加到光标所在行后面 |
1.3 文本插入命令
i text | 在当前光标所在位置,插入文本text |
I text | 在光标所在行的行首,插入文本text |
a text | 在当前光标所在位置之后,插入文本text |
A text | 在光标所在行的行尾,插入文本text |
o text | 在光标所在行的下面插入新的一行,光标停在空行的行首,等待输入 |
O text | 在光标所在行的上面插入新的一行,光标停在空行的行首,等待输入 |
1.4 光标移动命令
l 或空格键 或→ | 右移一个字符 |
h 或退格键 或← | 左移一个字符 |
j 或Ctrl+N 或↓ | 光标下移一行,列不变 |
K 或Ctrl+P 或↑ | 光标上移一行,列不变 |
+ 或回车键 | 移到下一行的第一列 |
- | 移到上一行的第一列 |
^ 或0 或 home | 移至行首 |
$ 或 end | 移至行尾 |
[行号]G | 移至指定行, 如20G表示移动到第20行 |
[列号]I | 移至指定列 |
H | 移至屏幕左上角 |
M | 移至屏幕中间行的开头 |
L | 移至屏幕最底行 |
Ctrl+G | 得到当前行的行号 |
:set number | 显示所有行的行号 |
:set nonumber | 取消所有行的行号 |
G | 移动到文件的最后一行 |
gg | 移动到文件的第一行 |
N[Enter] | 光标向下移动n行 |
|
|
Ctrl+g | 显示当前行号 |
N shift+g | 跳转到第n行 |
1.5 文本修改命令
x | 删除光标所在位置的字符 |
X | 删除光标所在位置前面的字符 |
dd | 删除光标所在的当前行 |
ndd | 删除光标所在的向下n行 |
dw | 删除单词 |
ndw | 删除n个单词 |
D | 从光标位置开始删除至行尾 |
d | 与光标移动命令组合使用,从光标位置开始删除至由光标移动命令限定的文本对象的末尾 |
. | 重复前面刚刚执行过的命令 |
u | 取消前面刚执行过的插入或删除命令 |
U | 把当前行恢复成编辑前的状态,不管对此行编辑了多少次 |
Ctrl+ r | 重做上一个操作 |
r 字符 | 在取代命令r后面键入一个字符则取代光标所在位置上原来的字符 |
R text<Esc> | 在R后面输入的若干字符一一取代光标所在位置及后面原来的若干字符直到按Esc键为止 |
yy | 复制光标所在的那一行 |
nyy | 复制光标所在的向下n行 |
p,P | p将已复制的数据在光标的下一行粘贴,P粘贴在光标的上一行 |
|
|
1.6 屏幕命令
Ctrl+F | 上滚一屏 |
Ctrl+B | 下滚一屏 |
Ctrl+U | 上滚半屏 |
Ctrl+D | 下滚半屏 |
Ctrl+Y | 上滚一行 |
Ctrl+E | 下滚一行 |
1.7 字符串检索
/pattern<Enter> | 从光标所在行开始向前查找模式(pattern),在找到第一个相匹配的字符串后,光标停在该字符串的第一个字符上。如果没有给定模式,就使用上一次检索时所用的模式 Note:使用“\”使特殊字符失去特殊含义,模式区分大小写字母 |
?pattern<Esc> | 从光标所在行开始向后查找模式(pattern),其余同上 |
n | 重复上一个检索命令,检索方向与检索命令相同 |
N | 重复上一个检索命令,检索方向与检索命令相反 |
:s/string1/string2 | 用字符串string2替换当前行上的第一个字符串string1 |
:s/string1/string2/g | 用字符串string2代换当前行上所有的字符串string1 |
:n1,n2s/string1/string2/g | 在n1和n2之间寻找string1,并替换为string2 |
:1,$s/string1/string2/g | 从第一行到最后一行查找string1,并替换为string2 |
:1,$s/string1/string2/gc | 从第一行到最后一行查找string1,并替换为string2,替换之前显示提示字符给用户确认 |