Vim 使用VI search and replace如何替换最后两组单引号中的文本?

Vim 使用VI search and replace如何替换最后两组单引号中的文本?,vim,replace,vi,Vim,Replace,Vi,我有很多这样的台词: { id: 22, name: 'Alice', score: 123, city: 'Atlanta', birthday: '1981/12/03'}, 我想使用VI-gvim来精确搜索、替换和清空最后两组单引号。您可以使用:normal cmd,有时它比:s更容易。例如: :norm! $F'di'3;. 将您的线路更改为: { id: 22, name: 'Alice', score: 123, city: '', birthday: ''}, 如果您想在所有

我有很多这样的台词:

{ id: 22, name: 'Alice', score: 123, city: 'Atlanta', birthday: '1981/12/03'},
我想使用VI-gvim来精确搜索、替换和清空最后两组单引号。

您可以使用:normal cmd,有时它比:s更容易。例如:

:norm! $F'di'3;.
将您的线路更改为:

{ id: 22, name: 'Alice', score: 123, city: '', birthday: ''},
如果您想在所有线路上都这样做,您只需:%norm。。。。。您也可以将norm cmd与:g组合使用,例如,您希望对名称为:


编写一个宏来实现这一点。要开始录制宏,请点击q,然后点击要保存宏的寄存器,例如在寄存器下。在命令模式下执行

$F'di';;di'j
$-转到行的末尾 F'-向后搜索' di'-删除单引号之间的内容 ;; - 转到前面的单引号 再次删除 j-转到下面的行


通过再次点击q来完成宏。然后,要在单行上应用宏,请点击@a。要在所有行上应用宏,请键入:%norm@a

如果要使用搜索和替换,可以执行以下操作:

:%s/city: '.\{-}'/city: ''
生日场也一样

:%s/birthday: '.\{-}'/birthday: ''
\{-}与*相同,但使用反最短匹配优先算法。见:帮助非贪婪者

如果您确实喜欢在单个命令中执行此操作:

%s/\(city:\|birthday:\) '.\{-}'/\1 ''/g

city:和Birth:作为子表达式与\和\匹配,则可以使用\1表示替换字符串中的第一个子表达式,需要使用end g选项在一行中进行多个替换。

接受您的答案,因为您使用搜索和替换回答了我的直接问题
%s/\(city:\|birthday:\) '.\{-}'/\1 ''/g