lay*_*er9 3 vim sed command-line
我知道 sed(流编辑器)是一个非交互式编辑器,对脚本和批处理很有用。我也理解 ex 和 vim 调用:ex-mode 是用于非交互式文本处理的行编辑器。我的问题不是关于哪个更好或更有用的意见,而是关于 ex/ex-mode 是否有任何预期用例或优势使其与 sed 区分开来。我问的原因是为了确定我是否通过忽略 ex-mode 而忽略了 sed 来确定我是否错过了。提前致谢。
ex和sed之间的一个主要区别是前者(至少在 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 作为非交互式命令行实用程序。对于其他任务,由于依赖关系(对 Vim、插件、我的个人配置),这通常不是一个选项。
你可以只用 sed 做很多事情,没有别的。如果你不是 Vim 用户(特别是如果你使用其他编辑器,并且可以在那里进行强大的文本处理),ex(模式)不是那么重要,但永远不会太远,因为它的语法与 sed 紧密一致,无论如何.