Поиск и преобразование в нижний регистр на VIM - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть код с object.attribute, где атрибут может быть примером массива: object.SIZE_OF_IMAGE[0] или простая строка.Я хочу найти все вхождения "object.attribute" и заменить его на self.lowercase(attribute) Я хочу, чтобы регулярное выражение в vim делало это.

Я могу использовать это :%s/object.*/self./gc и заменить его вручную, но это очень медленно.

Вот несколько примеров:

object.SIZE до self.size

object.SIZE_OF_IMAGE[0] до self.size_of_image[0]

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018

Исходя из вашего комментария выше, что часть атрибута "заканчивается пробелом или [или (" вы можете сопоставить его с:

/object\.[^ [(]*

Итак, чтобы заменить его на self.attribute используйте группу захвата и \L, чтобы сделать все строчными:

:%s/\vobject\.([^ [(]*)/self.\L\1/g
0 голосов
/ 19 сентября 2018

В основном вам нужны только две вещи:

  • Группы захвата :help /\( позволяют хранить то, что соответствует между \(...\), и затем ссылаться на него (через \1,\2 и т. Д.) В замене (или даже впоследствии в самом шаблоне).
  • :help s/\L специальное действие замены, которое выполняет все после строчных букв.

Это дает вам следующую команду:

:%substitute/\<object\.\(\w\+\)/self.\L\1/g

Примечания:

  • Я установил утверждение начала ключевого слова (\<)в начале, чтобы избежать совпадения schlobject.
  • \w\+ сопоставляет буквы, цифры и подчеркивания (так что это соответствует вашему примеру);здесь возможны различные альтернативы.
0 голосов
/ 19 сентября 2018
Команда
sed -E 's/object\.([^ \(]*)(.*)/self.lowercase(\1)\2/g' file_name.txt

выше считает, что за вашим атрибутом следует пробел или "("

вы можете настроить эту команду в зависимости от ваших потребностей

0 голосов
/ 19 сентября 2018

В командном режиме попробуйте это

:1,$ s/object.attribute/self.lowercase(attribute)/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...