在Vim中,搜索和替换命令到以下段:
b
将其转换为:
func {print("touching curly braces")}
到目前为止,我有:
func { print("touching curly brace") }
但是,它会对第一段进行此操作:
:%s/{.\( \)\@!/{./g
我相信我需要这样的东西:
func {.rint("touching curly braces")}
如何更换kleene明星'。'与它匹配的角色?
答案 0 :(得分:1)
我替换
<style>
.carousel .item {
height: 400px;
}
.item img {
position: absolute;
top: 0;
left: 0;
min-height: 300px;
}
</style>
和
:%s/{\($| \)\@!/{ /g
其中:%s/\(^| \)\@<!}/ }/g
为{\($| \)\@!
,negative lookahead为行尾或空格,另一个表达类似于negative lookbehind和{
请注意,替换像这样的源代码是一项危险的工作。你可以很容易地破坏事物。想想字符串中的花括号,或正则表达式中的花括号,或其他您没想过的情况。使用}
代替/gc
手动确认每次更改。
答案 1 :(得分:1)
您需要将.
放入一个组中,以便您可以在替换字符串中重复\(.\)
:%s/{\(.\)\( \)\@!/{ \1/g
:%s/}\(.\)\( \)\@!/} \1/g
这就是所谓的反向引用和分组
如果您想同时执行两个空格,请执行以下命令:
:%s/{\(\S.*\S\)}/{ \1 }/g
答案 2 :(得分:1)
s/\zs{\ze./& /g
s/.\zs}\ze/ &/g
你也可以这样做:
s/{\ze./& /g
s/.\zs}/ &/g