2011-12-12 57 views
4

是否可以使用正则表达式来更改emacs中的数组索引?Emacs正则表达式增加/减少数组索引

例如对于一些C代码的变化:

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

到:

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

一种与[i+1]操作取代[i]

回答

11

这样的事情?

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

\,替换字符串可以被任何lisp表达式替换。

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

+0

的作品就像一个魅力,我削减它归结为:的Mx 'query-replace-regexp''[[([0-9] + \] \]''[\,(1+(string-to-int \ 1))]'逐步遍历所有数组。非常感谢 – bph

+1

你可以用'\#1'代替'(string-to-int \ 1)'。 – Sean

+0

减少数组索引使用-mx query-replace-regexp my_array \ [\([0-9] + \)\] RET my_array [\,(1- \#1)] – bph

1

增量:

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

递减:

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