正则表达式 – Vim – 通过正则表达式搜索和替换的增量编号

我有这个代码
array ('id' => 1,'name' => "Murka",'date_of_birth' => "2014-10-31","breed_id" => 1),array ('id' => 1,'name' => "Jurka",'date_of_birth' => "2014-11-31","breed_id" => 2),'name' => "Nyash",'date_of_birth' => "2014-12-31","breed_id" => 3),'name' => "Meowy",'date_of_birth' => "2014-01-31","breed_id" => 4),'name' => "Yummi",'name' => "BaRSS",'date_of_birth' => "2014-05-31",'name' => "Nonam","breed_id" => null

我想要更改所有’id’=> 1(除了第1个)所以数字将增加1.使用Emacs很容易实现:

M-x replace-regexp
\(1,\)
\,(1+ \#),

正如here所述.经过一些研究,我用Vim达到的最大值是(灵感来自here):

:let i=1 | g/1,/ s//\=i/ | let i+=1

但这会删除以下所有逗号:

array ('id' => 1 'name' => "Murka",array ('id' => 2 'name' => "Jurka",array ('id' => 3 'name' => "Nyash",array ('id' => 4 'name' => "Meowy",array ('id' => 5 'name' => "Yummi",array ('id' => 6 'name' => "BaRSS",array ('id' => 7 'name' => "Nonam","breed_id" => null),

所以我必须解决它(我知道这很容易).

我知道this和宏,我只是想知道Vim中是否有任何单行命令解决方案.

更一般的问题:在Vim中是否可以注入一些逻辑,如条件语句,操纵正则表达式反向引用? Emacs中的示例如下:

C-M-% \(^.*\)\(linear-gradient(\)\(to right\|to bottom\)\(.*$\) <RET>
\& C-q C-j
\1-prefix-\2\,(if (equal "to right" \3) "left" "top")\4

大约一年前,这个帮助我重构了一些具有大量内联CSS的可怕的HTML代码.

我对你的一般问题没有答案,但我确实有一个针对你的具体情况.您可以通过将逗号置于正面预测中来使命令工作,如下所示:
:let i=1 | g/1(\,\)\@=/ s//\=i/ | let i+=1

现在它只会取代1.

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...