vim:如何通过匹配第一部分来查找单词,删除第一部分,然后在单词末尾添加一个字符串

vim:如何通过匹配第一部分来查找单词,删除第一部分,然后在单词末尾添加一个字符串,vim,find-replace,Vim,Find Replace,在我们的代码中,我们的变量有非标准的命名约定。例如,我们有一个类别标识符,它附加到文件中的许多变量,例如:usa\u foo,bar\u usa,其中usa是类别标识符。我想将所有这些名称转换为一个标准,将类别id放在末尾,这样usa\u-foo将变成foo\u-usa。由于这些变量通常嵌入到表达式中,它们后面可能会有一些可能的字符,在本例中(hashicorp hcl语言),这些字符主要是“,],,或空格。例如,我想: usa_foo = something something "${var.

在我们的代码中,我们的变量有非标准的命名约定。例如,我们有一个类别标识符,它附加到文件中的许多变量,例如:
usa\u foo
bar\u usa
,其中
usa
是类别标识符。我想将所有这些名称转换为一个标准,将类别id放在末尾,这样
usa\u-foo
将变成
foo\u-usa
。由于这些变量通常嵌入到表达式中,它们后面可能会有一些可能的字符,在本例中(hashicorp hcl语言),这些字符主要是
]
或空格。例如,我想:

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

如果我知道单词后面的字符,比如说
,我知道如何查找和替换。那就是

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

但是,我不确定如何匹配多个结尾字符,并且仍然执行相同的操作。

使用非常神奇的方法来避免反斜杠

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

\v ................... very magic
() ................... regex group with no backslash
注:我们将第二组保持在中间,只交换1个3次/p>
当然,如果在同一行中有其他引用,则应添加vim的。这能给你足够的信息吗?这很有效。谢谢@JeremysProfile这回答了你的问题吗?
:%s/\v(usa)(_)(foo)/\3\2\1

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