Emacs正则表达式:增加/减少数组索引

5

在Emacs中,是否可以使用正则表达式来修改数组索引?

例如,对于一些C代码,需要进行如下更改:

int my_array[4];
my_array[0] = 1;
my_array[1] = 2;
my_array[2] = 3;

to:

int my_array[4];
my_array[1] = 1;
my_array[2] = 2;
my_array[3] = 3;

一种将[i]替换为[i+1]的操作?
2个回答

13

这样行吗?

   M-x query-replace-regexp my_array\[\([0-9]+\)\] RET my_array[\,(1+ \#1)]

替换字符串中的 \, 可以被任何 Lisp 表达式所替代。

(最后一次编辑:使用 \#1 替换 (string-to-int \1))


1
你可以直接使用\#1代替(string-to-int \1) - Sean
要将数组索引递减,请使用 - M-x query-replace-regexp my_array[([0-9]+)] RET my_array[,(1- #1)]。 - bph
1
M-x query-replace-regexp \[\([0-9]+\)\] RET [\,(1+ \#1)] 已经可以使用!而减量函数是 1- - Rémi
哦,亲爱的 - 我又遇到问题了 - 如果我想按其他数字递增,比如说52,我尝试使用这个 [,(52+ #1)] 但是会出现“符号函数定义无效:52+”,并且它什么也不做。 - bph
没有中缀运算符,你应该阅读错误信息:它告诉你52+的函数定义是无效的。1+和1-是Emacs Lisp函数,但52+未定义。你可以定义它,但这不值得。 - Rémi
显示剩余7条评论

1
递增:
M-x query-replace-regexp \[\([0-9]+\)\] RET [\,(1+ \#1)]

减量:
M-x query-replace-regexp \[\([0-9]+\)\] RET [\,(1- \#1)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接