【发布时间】:2013-11-18 12:43:55
【问题描述】:
我最喜欢的两个 Vim 功能是能够将标准运算符应用于匹配正则表达式的行,以及通过外部命令过滤选择或范围的行的能力。但是这两个想法可以结合起来吗?
例如,我有一个用作实验室笔记本的文本文件,其中包含不同日期的笔记,并用一行破折号分隔。我可以用:% g/^-/d 之类的东西删除所有虚线。但是假设我想调整所有实际文本行的大小,而不触及那些虚线。
对于单个段落,这类似于{!}fmt。但这如何应用于所有非破折号段落?当我尝试看起来合乎逻辑的事情时,只需将这两个与:% v/^-/!fmt 链接在一起,那是行不通的。 (其实Vim好像崩溃了……)
有没有办法将这两个想法联系起来,并且只将匹配模式的行(不)传递给像fmt这样的外部命令?
【问题讨论】:
-
我不认为 Vim 崩溃了,我发现 fmt 的结果更有可能产生更多行,因此最终会无休止地递归(并构建一个巨大的文件)
-
不要将
%范围与:g和:v一起使用,默认情况下它们适用于整个缓冲区。 -
@Sarah 你说得对,Vim 没有在这里崩溃,但原因是提问者使用了
:!fmt没有范围。没有范围:!fmt从标准输入读取。没有崩溃,fmt 只是在等待输入。