4

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

改变

\textcolor{green}{一些随机文本}

进入

一些随机文本

这应该针对\textcolor{green}{}我的 tex 文件中出现的所有情况执行...

任何的想法?

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

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

2 回答 2

5

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

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

:g//norm d%diBvaBp

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

如果您安装了环绕.vim(推荐它!),您可以简单地删除这对大括号dsB(删除周围的 {})

:g//norm d%dsB

当然,你可以像这样组合它

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

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

:g//norm nNd%diBvaBp

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

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

后面跟着类似100@q重复宏的东西

于 2011-12-15T10:14:18.057 回答
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} 行放在自己的一行上,带有“特殊”标记 -HUUHAA-
  2. 使用视觉选择 vi{ 选择 {} 之间的所有内容,将其粘贴到外部并删除现在为空的 {}。
  3. 删除剩余的东西,包括标记。
于 2011-12-15T09:57:23.570 回答