使用搜索和替换来移动花括号命令(Vim)之外的内容

时间:2012-02-16 23:52:26

标签: regex search vim sed

我有这样的命令:

\bold{Foo Bar}
\bold{Foo Bars}
\bold{Foos Bar}
....
\bold{Zoo Cars}

我希望将它们变成

Foo Bar
Foo Bars
Foos Bar
...
Zoo Cars

:%s/\bold{*}//gc甚至找不到任何匹配项。我该怎么做?

注意:我四处搜索,但搜索都没有帮助。

4 个答案:

答案 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种方式(至少)

(你需要在粗体前面转义'\'字符)

  1. 我的推荐,2次通过

    %s/\\bold{/gc 
    %s/}//gc
    
  2. 如果您想一次完成所有操作

    %s/\\bold{\(.*\)}/\1/
    
  3. 另外,你到底真的需要'gc'吗?不是基于您的样本数据。

    我希望这会有所帮助。

答案 3 :(得分:0)

我知道已经有很多答案,但我真的不喜欢与VIM的替换,我总是使用globalnormal命令执行以下任务:

:g/^\\bold/normal df{f}x

g/^\\bold/选择以\bold开头的行,normal告诉VIM在正常模式下运行以下说明:df{f}x。这意味着:

  • df{ =删除,直到找到{;
  • f} =将光标模式设为下一个};
  • x =删除光标下的};