我有这样的命令:
\bold{Foo Bar}
\bold{Foo Bars}
\bold{Foos Bar}
....
\bold{Zoo Cars}
我希望将它们变成
Foo Bar
Foo Bars
Foos Bar
...
Zoo Cars
:%s/\bold{*}//gc
甚至找不到任何匹配项。我该怎么做?
注意:我四处搜索,但搜索都没有帮助。
答案 0 :(得分:3)
更改分隔符搜索,用逗号交换栏。轻松查看
%s,\\bold{\([^}]*\)},\1,g
whole file .............. %
swap .................... s
, ....................... delimiter search
\\bold{ ................. literal \bold{
\( ...................... open group one
[^}]* ................... all except }
\) ...................... close group one
, ....................... open swap (close search)
\1 ...................... back reference to group one
, ....................... close swap
g ....................... global
答案 1 :(得分:2)
你正在写一个正则表达式,但你认为它是一个全局。你也没有提供替代品。试试:%s/\\bold{\(.*\)}/\1/gc
。
答案 2 :(得分:2)
你可以2种方式(至少)
(你需要在粗体前面转义'\'字符)
我的推荐,2次通过
%s/\\bold{/gc
%s/}//gc
如果您想一次完成所有操作
%s/\\bold{\(.*\)}/\1/
另外,你到底真的需要'gc'吗?不是基于您的样本数据。
我希望这会有所帮助。
答案 3 :(得分:0)
我知道已经有很多答案,但我真的不喜欢与VIM的替换,我总是使用global
和normal
命令执行以下任务:
:g/^\\bold/normal df{f}x
g/^\\bold/
选择以\bold
开头的行,normal
告诉VIM在正常模式下运行以下说明:df{f}x
。这意味着:
df{
=删除,直到找到{; f}
=将光标模式设为下一个}; x
=删除光标下的};