2013-08-06 2 views
1

Я работаю на унаследованный код, где я с заявлением, как:Заменить текст между 2 символами в Vim

int array[MAX_SIZE_FOR_THIS_ARRAY]; 

В VIM, я хочу, чтобы заменить текст между [&] (включая [&]) с ARRAY следующим образом:

int array_ARRAY_; 

Обратите внимание: 1. Массив Размер Macro будет отличаться для разных массивов, поэтому мы не можем использовать MAX_SIZE_FOR_THIS_ARRAY в нашем себе арка узор. 2. Название переменной "array" также не является фиксированным.

Мне нужно найти [] только & заменить [...] на ARRAY везде, в тысячах строк кода.

Может кто-нибудь, пожалуйста, помогите мне в этом?

ответ

6

ca[ будет ответ, если вы делаете это с Vim ,

, так как вы помечено вопрос с sed тоже, вот так с СЭД:

kent$ echo "int array[MAX_SIZE_FOR_THIS_ARRAY];"|sed 's/\[[^]]*\]/_ARRAY_/' 
int array_ARRAY_; 

с вашим примером,

sed 's/\[.*]/_ARRAY_/' 

это тоже работает.

+0

Спасибо. MAX_SIZE_FOR_THIS_ARRAY - всего лишь примерная цитата. Имена макросов могут быть разными для каждого массива. –

+1

@SandeepSingh, второй пример должен получить все от '[' до последнего ']' на каждой строке. – rid

+0

@Kent, Большое спасибо, он работает! –

7

В то время как курсор находится в любом месте внутри квадратных скобок, вы можете использовать:

с[_ARRAY_

Чтобы помочь вам вспомнить:

  • с изменение
  • а вокруг
  • [ квадратные скобки
  • _ARRAY_ с _ARRAY_
+0

+1, не знал, что в vim есть что-то вроде «change around». Как вы проводите поиск в помощи? (Не получается с помощью простого ': h ca') – mohit

+3

: h text-objects @mohit – Kent

+0

Спасибо, но есть ли способ, с помощью которого я могу сделать это за один раз - для всех мест в файле, не принося курсор для каждого массива –

4

Вы можете сделать замену:

:%s/array\[MAX_SIZE_FOR_THIS_ARRAY\]/array_ARRAY_/g 
+0

Привет, Спасибо за ваш ответ. Но имя макроса: MAX_SIZE_FOR_THIS_ARRAY не везде.Каждый массив может иметь разные размеры и разные макросы, связанные с ним. Не могли бы вы предложить что-то, независимо от точной картины ч/б [&]. –

+3

@SandeepSingh используйте '. *' Вместо 'MAX_SIZE_FOR_THIS_ARRAY', если вы хотите получить все между скобками и удалите' array' как из левой, так и из правой части выражения, если вы хотите сделать это для каждого экземпляра, где появятся скобки, независимо от того, есть ли у них «массив» перед ними. – rid

+0

@rid Возможно, вы захотите использовать '. \ {-}' в этом случае ленивую версию '. *'. В противном случае 'array [0] [1]' будет заменен на 'array_ARRAY_', а не' array_ARRAY_ [1] '. –

Смежные вопросы