删除匹配大括号的命令

时间:2011-12-15 09:52:33

标签: vim macvim latex-suite

我正在使用(mac)vim和tex-suite,并希望有一个正则表达式命令(或任何其他方式)来执行以下操作:

更改

  

\ textcolor {green} {some random text}

  

一些随机文字

应该在我的tex文件中出现\textcolor{green}{}的所有内容......

有什么想法吗?

编辑:我需要它来识别匹配的大括号。这是一个例子:

\textcolor{green}{
     with $v_\text{F}\sim10^6$m.s$^{-1}$ the massless Dirac fermions 
     velocity in pristine graphene}.

2 个答案:

答案 0 :(得分:5)

根据我的经验,这样的事情在编辑过程中经常会出现,您可能已经突出显示了\textcolor{green}{

在这种情况下,:global通常是我的首选武器:

:g//norm d%diBvaBp

diBvaBp:diB(删除内部块),vaB(选择块),p(放置) 功能

如果您安装了surround.vim(推荐它!),您只需执行dsB(删除周围的{})即可删除这对括号

:g//norm d%dsB

当然,您可以将其合并为

:g/\\textcolor{green}{/norm d%dsB

我刚刚注意到当目标模式没有从一行的开始处开始时的潜在问题。解决这个问题的最简单方法是

:g//norm nNd%diBvaBp

更复杂的方式(可能效率较低)将使用宏:

/\\textcolor{green}{
gg
qqd%diBvaBpnq

后跟100@q之类的内容重复宏

答案 1 :(得分:1)

 :%s,\\textcolor{green}{\([^}]\+\)},\1,g

根据您更新的问题更新:

:%s,\\textcolor{green},\r-HUUHAA-&,g
:g/\\textcolor{green}/normal 0f\df}lvi{xhP$xx
:%s/\n-HUUHAA-//

快速解释其工作原理:

  1. 将所有\ textcolor {green}行放在他们自己的行上,并使用' special'标记-HUUHAA -
  2. 使用视觉选择vi {选择{}之间的所有内容,将其粘贴到外部并删除现在为空的{}。
  3. 删除包括标记在内的剩余内容。