2011-12-12 58 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)]