vi编辑程序--更新完善中...
进入vi:
$vi :
$vi filename
$vi +n filename :打开文件,并将光标置于第n行首
$vi + filename :打开文件,并将光标置于最后一行首
$vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
$vi -r filename :把上次已被修改过,但因意外中断而未被保存的文件filename读入到编辑缓冲区中,使得编辑工作接着上次继续进行。
$vi -x filename :如果被编辑文件filename是经过encrypt加密的,则可使-x选项在回答了口令后对文本文件进行编辑。
$vi filename....filename :首先编辑第一个文件,编辑完并用:w命令保存后用命令:n则开始编辑第二个文件;依此类推。
命令模式:
保存文本,退出编辑程序:
:wq //保存文本,退出vi,返回shell
:w //保存文本,不退出,继续在vi中
:w file //把文本保存到文件file中,不退出
:w! filename //强行写到文件filename中,不退出
:q //退出vi,返回到shell中
:q! //强行退出vi,不保存修改过的文本
注:q命令如果运行成功,隐含着文本未被修改或修改后已保存,否则程序将给出错误提示,并拒绝退出。
文本的插入:
i //在光标前插入文本
I //在光标所在行首插入文本
a //在光标后加入文本
A //在光标所在行尾插入文本
o //在光标所在行下面新加一行
O //在光标所在行上面新加一行
ESC //退出文本输入模式,返回命令模式
光标移动:
光标的左下上右移动;
h j k l //光标的左下上右移动;
^ //光标从当前位置移到本行行首
$ //光标从当前位置移到本行行尾
+ //光标下移一行
- //光标上移一行
空格键 //光标左移
退回键 //光标右移
删除文本:
x //删除光标所在字符
dw //删除光标所在词的从光标开始到该词结尾的部分
D //删除光标所在位置到行尾部分
dd //删除光标所在行
注意:x、dw、dd命令前都可以加上数字,表示同时删除多个单位。
替换文本:
r:字符替换命令,把当前光标所在字符替换为紧跟在后面的字符(只替换一个字符)
cw:单词替换命令,把当前光标所在单词中,从光标所在字符到该单词结尾部分,替换为紧跟在cw命令后输入的部分,直到ESC键结束(新输入部分可能与被替换部分不等长)。
搜索文本(/和?命令):
键入/后,/出现在屏幕左下角,当输入要查询的字符串并按回车后,vi从当前位置开始向文件尾方向进行查找,并停留在找到的第一个字符串位置。如果按n则继续向文件尾方向查找。如果查找到文件尾后继续按n则又从文件头开始向文件尾方向进行查找。在查找过程中如果按N键,则是向文件头方向进行查找。?命令与/命令功能完全相同,只是查找方向是从当前位置向文件头方向进行。
其它辅助操作:
u命令:取消最近一条修改文本的命令。
.命令:重复最近一条修改命令。
J命令:把下一行连接到当前行的行尾。
p命令:把最近一次删除命令删除的内容粘贴到当前光标之后,光标以后的内容依次向后移动;如果最近删除的是行,则粘贴到当前行下面,原当前行下面的行依次向下移动。对一次删除的文本,可用p命令任意粘贴多次。
删除/粘贴命令(ndd/p);复制/粘贴命令(nyy/p);
文本输入模式:略
行编辑器edit:
在行编辑器中每一条编辑命令编辑的单位是行而不是字符,定位点是“当前行”而不是“光标所在字符”。
进入行编辑器的两种方法:
从shell进入行编:$edit(或e,ex) file
从vi的屏编状态进入行编:在屏编的命令模式下按:即可进入行编
从行编退回屏编:v或vi,从行编回到屏编后,光标停留在行编处理的最后一行的行首。
常用行编命令(下面m和n为具体数字):
:n //把第n行作为当前行(移动到第n行去)
:np //显示第n行的内容,并把第n行作为当前行
:m,np //显示第m行到第n行的内容,并把第n行作为当前行
:d //显示当前行,被删除行的下一行为当前行
:nd //删除第n行的内容,(删除操作后的)第n行为当前行
:m,nd //删除第m行到第n行的内容,(删除操作后的)第n行为当前行
:a //在当前行的下一行开始输入文本,直到ESC键为止
:1,$ //从第一行到最后一行(整个文本)
:.,$ //从当前行到最后一行
:s/string1/strings2/ //把当前行中的第一个string1字符替换为字符串string2
:m,ns/string1/string2/g //把从m行到n行中的所有string1替换成string2
:r filename //在当前行的后面读入(附加)文件filename的内容
:nr filename //在第n行的后面读入(附加)文件filename的内容
vi除文本编辑之外的功能:
在vi中执行unix命令 (!ls !date !cal !who ...)
命令行编辑功能($set -o vi)
附图(转载):