Jac*_* M. 22
Ex-Mode 主要用于对多个文件执行相同的操作。
假设您有 25 个 .html 文件,全部包含:
<a href="/home.html"> ...
Run Code Online (Sandbox Code Playgroud)
您可以使用 Ex-mode 将其全部更改为index.html:
vim -E -s bob.html <<-EOF
:%substitute/home.html/index.html/
:update
:quit
EOF
Run Code Online (Sandbox Code Playgroud)
处于 Ex 模式(也称为ex)的Vim 在以下情况下很有用:
以非交互方式编辑文件是最常见的用法,人们以与sedand类似的方式使用它awk,但是它们更面向流 - 他们只从头到尾向前读取文件,而vim面向缓冲区 - 您可以向前和向后移动在您喜欢的文件中。其次,vim 的正则表达式比 awk 和 sed 的表达式更强大(它们不是设计用于多行的)——例如 vim 可以匹配多行并支持零匹配。
Ex 也是一个编辑器(vi 的直接前身)并且在 Vim 中 - Ex 模式模拟ex(它们仍然运行相同的代码),因此可以ex从 vi 内部进入命令模式,反之亦然。Ex 模式 ( vim -e) 和改进的 Ex 模式允许比 vi 兼容的 Ex 模式 ( vim -E)更高级的命令。请参阅:Ex 模式和改进的 Ex 模式有什么区别?
Ex 是编辑器家族的根:edit、ex 和 vi。Ex是超级?ed 集,最显着的扩展是显示编辑工具。前(1)
这是改变的简单的例子127,以128您的hosts文件和打印输出:
ex -s +%s/127/128/g +%p +q! /etc/hosts
Run Code Online (Sandbox Code Playgroud)
相当于:
sed s/127/128/g /etc/hosts
Run Code Online (Sandbox Code Playgroud)
对于更高级的解决方案,您可能拥有带有 vim 命令的文件,并通过更经典的 I/O 重定向方法使用它:
echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts
Run Code Online (Sandbox Code Playgroud)
您还可以使用 vim 插件来执行一些任务。
例如,以下单行代码将使用标准插件之一将您的源代码文件转换为 html:
ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c
Run Code Online (Sandbox Code Playgroud)
它将从您的代码(以任何受支持的语言编写)生成 html 文件(带有语法突出显示),该文件已准备好打印或发布在您的网站上。
vim -E -s Makefile <<-EOF
:%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
:%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
:%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
:update
:quit
EOF
Run Code Online (Sandbox Code Playgroud)
以下脚本将通过下载示例站点的 html 并用自动生成的 20x20 表替换其正文来创建一个新的 html 文件,其中包含随机数:
" table.vim
%!curl -s example.com
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq
Run Code Online (Sandbox Code Playgroud)
用法:
ex -s table.html < table.vim
Run Code Online (Sandbox Code Playgroud)
这将适用于安装了 curl 的 *nix 之类的系统。添加
-V以查看正在运行的脚本。
更多例子:
也可以看看:
从最近的 7.3 开始,作为持久性撤消支持,ex 模式和其他形式的 vim 批处理优于其他非 vim 方法,因为它不会破坏撤消历史。
添加: 'persistent undo' 如果启用,则在 vim 编辑会话中保留对文件的所有更改(最多限制)。如果文件是由外部程序编辑的,vim 会在通过校验和检测到它已更改时重置撤消历史。vim -E 将允许您批量编辑文件,编辑将在撤消历史记录中。