学习vi编辑器5
第五章 介绍ex编辑器
可以用空格来分隔行地址、模式、命令
首先利用ex打开文件
ex filename
查看文件的第一行:
1p或者1
打印文件的1到3行:
1,3
替换命令:(将当前行中的a全部替换成为A)
s/a/A/g
如果当前行是第9行,那么如下的命令可以达到同样的效果
9s/a/A/g
命令:vi可以从ex转换到vi中
在vi命令模式下,Q命令可调用ex,在ex中的任何时刻,命令vi可使你返回到vi编辑器
:10,16d[elete] 删除10到16行的内容
定义行的范围
使用明确数字的地址称为绝对行地址
:3,18d 删除3~18行
:160,224m23 移动160~224行到23行的下面(如同vi中的delete和put)
:23,29co100 复制23~29行并把它们粘贴到100行的后面(如同vi中的yank和put)
:set nu 是 :set number的缩写,相反的命令是:
:set nonu和:set nonumber
:1,10# 暂时的显示部分行的行号
:= 显示总行数
:.= 显示当前行的行号
:/pattern/= 显示第一个与模式相匹配的行的行号
行地址符 点(.)代表当前行;$代表文件的最后一行;%代表文件中的每一行,等同于1,$
:.,$d 删除从当前行(包括)到最后一行(包括)之间的文本
:20,.m$ 把从20行到当前行的文本移动到文件的结尾
:%d 删除文件中的所有行
:%t$ 复制所有行并把它们粘贴到文件的尾部(成为连续的副本)
使用+-指定一个相对当前行的地址
;.,.+20d 删除从当前行开始向下的20行
:226,$m.-2 把226行到文件末尾的文本移动到当前行上面的第二行
:,+20# 显示从当前行到下面20行的行号
:-,+t0 复制前后,当前三行到文章的开头(就是虚构的第0行的后面)
搜索模式
ex定位行的另一种方法是使用搜索模式
:/pattern/d 删除下一个(从当前行开始搜索)包含模式pattern的行
:/pattern/+d 删除下一个(从当前行开始搜索)包含模式pattern的下一行
:/pattern1/,/pattern2/d 将从第一个包含模式1的行到第一个包含模式2的行之间的内容删除(有可能这个范围是负的)
:.,/pattern/m23 将从当前行(.)到第一个包含模式pattern的行之间的文本移动到23行的后面
:100;+5 p 从100行到105行(注意分号)
全局搜索
:g/pattern 寻找所有的pattern模式,并停止到最后一个
:g/pattern/p 寻找并显示文件中所有包含模式pattern的行
:g!/pattern/nu 寻找并显示文件中所有不包含模式pattern的行,同时还显示这些行的行号
:60,124g/pattern/p 寻找并显示第60到124行之间所有包含模式pattern的行
组合ex命令
:1,3 d | s/their/their/ 把一到三行删除;然后再当前行(该行是调用ex提示符以前的第4行)进行替换
:1,5 m 10 | g/pattern/nu 把第一行到第五行移动到第10行的后面,然后显示所有包含模式pattern的行(和行号)
保存和退出文件
vi保存退出命令ZZ
:w 把缓冲区写到文件中
:q 退出编辑器
:wq 写文件并退出编辑器,即使没有修改文件,写操作也会无条件的进行
:x 如果修改了文件就写文件,退出,如果没有修改文件就直接退出
加上感叹号就强制执行前面的操作(前提是能够有办法执行)
重命名缓冲区
可以使用:w将整个缓冲区保存到新文件中
:w filename.new
保存部分文件
:230,$w newfile 将从第230行到文件末尾的文本保存到newfile中
:.,600w newfile 将从当前行到第600行的文本保存到newfile中
添加到现有文件中
:340,$w >>newfile 将缓冲区从340到尾部的内容保存到newfile的尾部
把文件复制到另一个文件中
:r[ead] filename 将filename文件的内容插入到本文件中光标位置的后面
:185r /xxx/filename 将filename文件插入到本文件中第185行后面,另外还有
:$r data
:0r data
:/pattern/r data
编辑多个文件
调用vi打开多个文件
vi file1 file2 打开两个文件,并显示出第一个文件
:ar[gs] 查看当前打开文件,方括号括起当前选择的文件
:rew[ind] 把当前文件重新设置为命令行上指定的第一个文件
:last 把当前文件设置为命令行上指定的最后一个文件
:e file 可以在vi中新打开file文件
在打开两个文件的时候%代表当前文件名字符串,#代表备用文件名字符串
:e! 放弃编辑操作并返回到当前文件上次保存过的版本
^^ 等同于:e#
在文件之间进行编辑
方法一跟单文件相同,仅仅是切换文件的区别,方法二
:160,224ya a 将第160行到224行复制到缓冲区a中,接下来使用:e移动到想放置的文件,输入:pu a就复制过去了,注意这个a缓冲区就是"a缓冲区