vim: как найти слова по первой части, удалить первую часть, а затем добавить строку в конец слова - PullRequest
0 голосов
/ 02 апреля 2020

В нашем коде у нас есть нестандартные соглашения об именах для наших переменных. Например, у нас есть идентификатор категории, который прикреплен ко многим переменным в файле, например: usa_foo, bar_usa, где usa - идентификатор категории. Я хотел бы преобразовать все эти имена со стандартом размещения идентификатора категории в конце, поэтому usa_foo превратится в foo_usa. Поскольку эти переменные часто внедряются в выражения, за ними может следовать несколько возможных символов, которые в данном случае (язык hashicorp hcl), в основном, ", ], , или пробел. Например, я хотел бы превратить:

usa_foo = something
something "${var.usa_foo}"
b = [var.usa_foo, var.bar_usa]
bar_usa

в:

foo_usa = something
something "${var.foo_usa}"
b = [var.foo_usa, var.bar_usa]
bar_usa

Я знаю, как найти и заменить, если я знаю символ, следующий за словом, скажем ". Тогда это будет

%s/usa_\(\w*\)"\(.*\)/\1_usa"\2/g

Однако я не уверен, каким образом я могу сопоставить несколько конечных символов и все же делать то же самое.

1 Ответ

1 голос
/ 02 апреля 2020

Использование очень волхвов c, чтобы избежать обратного удара. sh

:%s/\v(usa)(_)(foo)/\3\2\1

\v ................... very magic
() ................... regex group with no backslash

ПРИМЕЧАНИЕ. Мы держим вторую группу посередине, просто меняем 1 на 3

Конечно, если у вас есть другие вхождения в той же строке, вы должны добавить /g

...