在 vim 中通过外部脚本修改文本块

Modify textblock by external script in vim

在编辑文件时我经常遇到以下任务:我有一个独立的脚本,它接受输入并输出它的修改版本(可能是 sort,可能是 sed 脚本,可能更复杂python 脚本)并且我想 运行 它在 vim.

中的一段文本中

回答解释了如何将文本块提供给外部脚本,我假设可以类似地使用 :r 将脚本的输出读入文件。但是我怎样才能做到这两点:将文本从 vim 馈送到外部脚本并将其输出返回到 vim?

您可以使用普通模式命令过滤 vim 中的一段文本 !{motion}。例如,对下面的文本使用外部排序工具 (忽略 vim 现在有自己的排序这一事实):

b
a
d
c

使用!ip(外部命令!inside p段落),它将带你到 带有预填充命令行提示符的命令行(我的看起来像 :.,.+4!) 您只需在其中键入任何外部工具(例如 :.,.+4!sort) 你想将文本发送到 stdin。由此产生的烈性黑啤酒将取代 所选行:

a
b
c
d