加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:31:44 所属栏目:百科 来源:网络整理
导读:我有这个代码: 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),
我有这个代码:
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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读