我有很多这样的台词:
{ id: 22, name: 'Alice', score: 123, city: 'Atlanta', birthday: '1981/12/03'},
我想使用VI(确切地说是gvim)搜索并替换并清空最后两组单引号。
答案 0 :(得分:7)
您可以使用:normal
cmd,有时它比:s
更容易。为你的例子:
:norm! $F'di'3;.
会将您的行改为:
{ id: 22, name: 'Alice', score: 123, city: '', birthday: ''},
如果您想在所有行上执行此操作,只需:%norm! ....
。您也可以将norm
cmd与:g
合并,例如您希望使用name:
:g/name:/norm! ...
答案 1 :(得分:3)
编写宏来实现这一目标。要开始录制宏,请点击q
,然后点击要保存的寄存器(例如在a
寄存器下)。在命令模式下执行。
$F'di';;di'j
$ - 转到行尾
F' - 向后搜索'
di' - 删除单引号之间的内容
;; - 转到之前的单引号
di' - 再次删除
j - 转到下面的行
再次点击q完成一个宏。然后,在单行上应用宏@a
。要在所有行上应用宏,请键入:%norm! @a
答案 2 :(得分:2)
如果您想使用搜索和替换,您可以这样做:
:%s/city: '.\{-}'/city: ''
和生日字段相同
:%s/birthday: '.\{-}'/birthday: ''
" \ { - }"与" *"相同但使用de shortest match first算法。 (参见:帮助非贪婪)
如果您真的喜欢在一个命令中执行此操作:
%s/\(city:\|birthday:\) '.\{-}'/\1 ''/g
"城市:"和"生日:"作为子表达式与\(和\)匹配,然后你可以在替换字符串中使用\ 1(表示第一个子表达式),需要结束g选项在单个字符串中进行多个替换线。