我想在 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)
\U开始大写和\E结束大写)\1)但是你能看到剩下的空间吗?MY_HW VERSION而不是MY_HW_VERSION...
所以我想在 \1像\1:s/\s/_/g. 有可能吗?怎么做?
谢谢!
这将是一行:scmd,适用于您的示例:(我将其分成多行,只是为了更好地阅读)
s@\v(.*) (\d+)@
\='#define MY_'
.toupper(substitute(submatch(1),' ','_','g'))
.' (0x0'.submatch(2).') //'.submatch(1)@
Run Code Online (Sandbox Code Playgroud)