vi的工作模式
vi有三种工作模式:命令模式,插入模式,和末行模式。
1.命令模式
在shell中启动vi时,最初就是进入命令模式。在该模式可以输入各种vi命令,可以进行光标的移动,字符,字,行的删除复制粘贴等操作。此时从键盘上输入的任何字符都作为命令来解释,在其他两种模式下,按就可以转换到命令模式。
2.插入模式
插入模式主要用于输入文本。在该模式下,用户输入的任何字符都作为文件的内容保存起来,并会显示在屏幕。在命令行模式下输入i,a等命令就可以进入插入模式。要返回命令模式,只需按键。
3.末行模式
在命令模式下,按 :键就进入末行模式。在末行模式下可以进行保存文件,退出,查找字符串,文本替换,显示行号等操作。一条命令执行完毕,就会返回命令模式。
启动vi
vi :不指定文件名,再保存文件时需要指定文件名
vi 文件名 :该文件既可以是已存在的也可以是新建的。
vi +n 文件名 :进入vi,光标停在第n行开始处。
vi +/字符串 文件名 :进入vi,光标停留在第一个字符串处。
保存文件和退出
在末行模式输入如下命令:
w:保存当前正在编辑的文件,但不退出vi。
w! 文件名:将当前文件内容保存由“文件名”指定的新文件中,若该文件已存在则覆盖原文件,该命令不会退出vi。
q:不进行文件保存直接退出vi,若文件有改动过而没有保存将产生错误。
q! :强制退出vi,若文件内容有改动则恢复到文件的原始内容。
wq!:保存并退出vi,这是最常用的退出vi的方式。
光标的移动
在vi的插入模式下,一般使用键盘的4个方向移动光标。而在命令行模式下有很多方法:
0:移动到当前行的行首
$:移动到当前行的行尾
w:右移一个字。
nw:右移n个字,n为数字
b:左移一个字
nb:左移n个字,n为数字
( :移到本句句首,如果已处于本句句首,则移动到前一句的句首。
):移动到下一句的句首。
{:移到本段的段首,如果已处于本段的段首,则移动到前一段的段首。
}:移动到下一段的段首。
nG:移动到文件第n行的行首。
文本的删除
在插入模式下,用delete键可以删除光标所在位置的一个字符,用back space键 删除光标所在位置的前一个字符。在命令模式下,有各种各样的删除文本的方法:
x:删除光标所在位置的一个字符
nx:删除光标所在位置的n个字符。
db:删除光标前的一个字。
ndb:删除光标前的n个字。
d0:删除从光标前一个字符到行首的所有字符。
d$:删除光标所在字符到行尾的所有字符。
dd:删除光标所在的行。
ndd:删除从当前行开始的n行
d(:删除从当前字符开始到句首的所有字符。
d):删除从当前字符开始到句尾的所有字符。
d{:删除从当前字符开始到段首的所有字符。
d}:删除从当前字符开始到段尾的所有字符。
提示:如果要取消前一次操作,在命令模式下输入字符u即可。
文本查找和替换
在命令模式下,查找文本方法:
?string :在命令模式下输入?和要查的字符串如“string”并回车即可。
n:向文件头方向重复前一个查找命令。
N:向文件头方向重复前一个查找命令。
:s/oldstr/newstr :在当前行用newstr字符串替换oldstr字符串,只替换一次。
:s/oldstr/newstr/g :在当前行用newstr字符串替换所有的字符串oldstr。
:1,10s/oldstr/newstr/g :在1-10行用newstr字符串替换所有的字符串oldstr。
:1,$s/oldstr/newstr/g :在整个文件中用newstr字符串替换所有的字符串oldstr。
文本的复制与粘贴
yw:将光标所在位置到字尾的字符复制到缓冲区。
nyw:将光标所在位置开始的n个字符复制到缓冲区。
nyb:从光标开始向左复制n个字。
y0:复制从光标前一个字到行首的所有字符。
y$:复制从光标开始到行末的所有字符
yy:复制当前行。
nyy:复制从当前行开始的n行。
p:在光标所在位置的后面插入复制的文本
P:在光标所在位置的前面插入复制的文本。
np:在光标所在位置的后面插入复制的文本,共复制n次
nP:在光标所在位置的前面插入复制的文本,共复制n次