Ex / vim ex-mode和sed是否属于同一任务的不同实用程序或两个不同程序


1

我知道sed(流编辑器)是一种非交互式编辑器,可用于脚本编写和批处理。我也了解ex及其vim调用:ex-mode是用于非交互式文本处理的行编辑器。我的问题不是关于哪个更好或更有用的观点之一,而是关于ex / ex模式是否有任何预期的用例或优势将其与sed区分开。我问的原因是通过忽略赞成sed的ex模式来确定我是否错过了。提前致谢。

Answers:


2

exsed之间的主要区别是前者(至少在Vim实现中)将整个文件读入缓冲区并对其进行操作。sed中的“ s”代表流式传输,即sed逐行读取输入文件,并在旅途中将其输出。因此,sed可以轻松处理非常大的文件,而ex / Vim将需要操作系统的虚拟地址空间,并且读写速度相当慢。

因此,使用sed时,如果您需要保留前几行的上下文,则必须将其与模式空间显式连接,或将其存储在单个可用的保留空间中。而在ex / Vim中,您可以导航回到上一行或使用跨缓冲区多行的正则表达式。而且,在Vim中不仅有单个保留空间,而且还有多个命名寄存器(在ex中称为命名缓冲区)。因此,如果单个存储空间不足,则必须从sed升级到awk(以保持流媒体方面),或切换到ex / Vim。

在实践中

如果我已经在Vim中打开了文件,则自然会使用ex模式进行某些文本操作。:substitute是最常用的命令之一(至少对我而言)。许多ex命令都有对应的(通常是递归的)实现;根据任务(和个人喜好/能力)的不同,您倾向于更频繁地使用一个或另一个。

对于自动化任务,我更喜欢sed/ awk/ Perl工具链; 这里的好处是,您可以从小型(使用sed)开始,一旦达到其功能的极限,就可以轻松迁移到功能更强大(但也更复杂,更大)的下一个工具。如果这是一项一次性的自动化任务,并且我已经知道一个可以极大简化实现的漂亮的宏或Vim插件,那么我考虑将Vim用作无提示ex模式下的非交互式命令行实用程序。对于其他任务,由于依赖关系(对于Vim,插件,我的个人配置),通常不是一个选择。

摘要

只需sed,您就可以做很多事情,而没有其他事情。如果您不是Vim用户(特别是如果您使用其他编辑器,并且可以在其中执行强大的文本处理),则ex(mode)并不是那么重要,但永远不会远离,因为它的语法始终与sed保持一致。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.