功能说明:在Ex模式下启动vim文本编辑器。
ex执行效果如同vi -E,使用语法及参数可参照vi指令,如要从Ex模式回到普通模式,则在vim中输入:vi或:visual即可。
2,使用 ex 编辑
ex 允许使用单个命令对大的文本块进行修改,因此如果相对很多行进行编辑时,ex 会更有用;
下面列出 ex 命令,中间为这些命令的缩写,当然,如果在 vi 中使用时,必须在 ex 命令前加上冒号。
delete d 删除行
move m 移动行
copy co 复制行
t 复制行
- 关于行地址
每个 ex 编辑命令都必须给出 ex 所要编辑的行,主要通过以下几种方式指定行地址:
- 明确的行号
- 使用能帮助你指定相对于文件中当前位置的行号的符号
- 使用搜索模式作为标识所要编辑的行的地址
:3,18d 删除3~18行
:160,224m23 移动 160~224行到 23 行的下面(如同vi中的delete和put)
:23,29co100 复制23~29行并把它们粘贴到100行的后面(如同vi中的yank和put)
:= 显示总行数 == c
trl+g
:.= 显示当前行的行号
:/pattern/= 显示第一个与模式匹配的行的行号
- 行地址符
可以使用表示行地址的符号,点(.)表示当前行;$ 代表文件的最后一行; % 代表文件中的每一行,等价于 1,$ 的组合。
* 与绝对地址的组合
:.,$d 删除从当前行到文件结尾之间的文本
:20,.m$ 把从20行到当前行的文本移动到文件的结尾
:%d 删除文件中的所有行
:%t$ 复制所有行并它们粘贴到文件的尾部(成为连续的副本)
* 相对地址组合(符号+和-放置在数字前会加上或者减去符号后的数值)
:.,.+20d 删除从当前行开始向下的 20 行
:226,$m.-2 把 226 行到文件末尾的文本移动到当前行上面的第 2 行
:.,+20# 显示从当前行下面20行的行号
:-,+t0 +和-后面没有数字,分别相当于+1和-1,数字0表示文件开头,等价于1-,由于当前行是假定的开始位置,因此在使用+和-时不需要输入圆点(.)。该条命令表示复制三行(当前行上面的行到当前行下面的行),并把它们粘贴到文件开头
- 搜索模式
:/pattern/d 删除下一个包含模式 pattern 的行
:/pattern/+d 删除下一个包含模式 pattern 的行的下面的行 == :/patter/+1d
:/pattern1/,/pattern2/d 将从第一个包含模式 pattern1 的行到第一个包含模式 pattern2 的行之间的内容删除
:.,/pattern/m23 将从当前行(.)到第一个包含模式pattern的行之间的文本移动到23行的后面
- 全局搜索(命令g和g!)
:g/pattern 寻找(移动到)模式pattern在文件中最后出现的位置
:g/pattern/p 寻找并显示文件中所有包含模式 pattern 的行
:g!/pattern/nu 寻找并显示文件中所有不包含模式 pattern 的行,并显示这些行的行号
:60,124g/pattern/p 寻找并显示第60行到124行之间所有包含模式pattern的行
- 组合 ex 命令
在 ex 中,竖线(|)是命令分隔符,它允许用户把多个命令组合在同一个 ex 提示符下(类似于 *nix 的管道)。例如:
:1,3d | s/thier/their/ 把第1行到第3行删除(保留文件中的顶行);然后在当前行(该行是调用ex提示符以前的第4行)进行替换
:1,5 m 10 | g/pattern/nu 把第1行到第5行移动到第10行之后,然后显示包含模式pattern的所有行(和行号)
3,保存和退出文件
:w 把缓冲区写到文件中但不退出
:q 退出编辑器
:wq 写文件并退出编辑器,即使没有修改文件,写操作也会无条件进行
:x 写文件并退出编辑器,只有修改了文件写操作才能进行
:q! 强行退出,不影响原来的文本,忽略在本次会话中的所有编辑。缓冲区的内容将被删除
:w new
file 当前编辑的老版本文件不变,将缓冲区的内容保存到新文件newfile中
:230,%w newfile 将从第230行到文件末尾的文本保存到 newfile 中
:.,600w newfile 将从当前行到第 600 行的文本保存到 newfile 中
:1,10w >> newfile 使用 UNIX 重定向将缓冲区的全部或者部分内容追加到文件 newfile 中
4,文件复制
:read filename == :r filename 读取另一个文件filename的内容并插入到正在编辑文件光标位置后的行的开始。
:30r /etc/passwd 将文件 passwd 内容放在第30行的后面
:$r /etc/passwd 将passwd内容放在文件结尾
:0r /etc/passwd 将passwd内容放在文件开头
:/pattern/r /etc/passwd 将passwd 内容放在当前文件中包含pattern模式的行的后面
5,编辑多个文件
vi file1 file2 首先编辑file1,完成第一个文件后,使用 :w 保存file1,然后输入 :n 调用下一个file2
:args ex 的参数列表命令 args, 在状态行上显示参数列表,当前文件使用 [] 括起来
:e newfile 调用新文件
:e! # 如果在对新编辑的文件 newfile 进行编辑后想放弃这些编辑并返回到之前的文件 ol
dfile 中,可用此
:w %.new % 主要用于把当前缓冲区中的内容写到新文件中
ctrl+^ 用于在多个文件之间切换,与 :e # 命令相同,如果保存当前缓冲区,那么不允许切换到前面的文件
实例:在文件之间进行编辑,可以通过为复制缓冲区指定单字母名字,来拥有把文本从一个文件移动到另一个文件的方法。如:
"f4yy 复制从当前文件的当前位置之后的 4 行到缓冲区 f 中
:w 保存当前文件
:e newfile 进入新文件 newfile 中,移动光标至需要放置复制文本的位置
"fp 把缓冲区 f 中已复制的文本粘贴到光标的下面
另一种是使用 ex 编辑命令中的 :ya(复制)和 :pu(粘贴)命令。但是它们需要与 ex 的行地址范围和命名缓冲区一起使用。如:
:160,220ya a 将把 160 行到 220 行复制到缓冲区 a 中,接下来可以使用 :e 命令移动到想要放置这些行的文件,把光标定位到放置已复制行的某一行上,然后输入:
:pu a 把缓冲区 a 中的内容粘贴到当前行的后面