vim:替换反向引用中的字符

CJl*_*ano 3 regex vim

我想在 vim 中做以下替换:我有一个字符串(最终有空格)和行尾的数字。我想#define用大写字母 + 前缀 + 下划线、数字(十六进制)和最后作为注释的原始字符串创建一个 C。

例如,来自:

hw version 0
Run Code Online (Sandbox Code Playgroud)

到:

#define MY_HW_VERSION (0x00) // hw version
Run Code Online (Sandbox Code Playgroud)

到目前为止,我编写了以下正则表达式:

s/^\(.*\) \(\d\+\)$/#define MY_\U\1\E (0x0\2)\/\/ \1/
Run Code Online (Sandbox Code Playgroud)

这使

#define MY_HW VERSION (0x00) // hw version
Run Code Online (Sandbox Code Playgroud)
  • 大写:OK(用于\U开始大写和\E结束大写)
  • 前缀:好的
  • 数字:好的(十六进制可能是一个问题,但这不是我的问题的目的)
  • 评论:好的(重用反向引用\1

但是你能看到剩下的空间吗?MY_HW VERSION而不是MY_HW_VERSION...

所以我想 \1\1:s/\s/_/g. 有可能吗?怎么做?

谢谢!

Ken*_*ent 5

这将是一行:scmd,适用于您的示例:(我将其分成多行,只是为了更好地阅读)

s@\v(.*) (\d+)@
\='#define MY_'
.toupper(substitute(submatch(1),' ','_','g'))
.' (0x0'.submatch(2).') //'.submatch(1)@
Run Code Online (Sandbox Code Playgroud)