【问题标题】:Remove command with matching braces删除带有匹配大括号的命令
【发布时间】:2011-12-15 20:30:42
【问题描述】:

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

改变

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

进入

一些随机文本

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

有什么想法吗?

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

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

【问题讨论】:

  • 不是很清楚 哪些 大括号可以是括号。愿意展示示例吗?
  • @sehe。抱歉,我根本不应该使用括号这个词。就我而言,都是大括号。但我希望它是通用的。我会用一个嵌套大括号的例子来更新这个问题。
  • 我刚刚用编辑后的版本进行了测试,我可以确认它运行良好。

标签: vim macvim latex-suite


【解决方案1】:

根据我的经验,这样的事情在编辑过程中最常出现,您可能已经突出显示了对 \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 之类的东西重复宏

【讨论】:

  • @Nigu 发现了一个警告并提出了解决方法/修复。宏观方法通常较慢,但这可能不感兴趣
  • @sehe。当我在同一行上出现不同的\textcolor{green}{ 时仍然存在问题......但我会接受你的回答,甚至可能会有其他警告会刺激,所以产量可能不值得麻烦。还是非常感谢!
  • @Nigu:我知道剩下的怪癖。只需运行命令两次,或使用宏变体。顺便说一句,我已经给出了这个真实的想法,我不希望会出现任何其他内容。如果这是一次性编辑,我会推荐它。否则,您最好对正在编辑的语法使用现有解析
【解决方案2】:
 :%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. 删除剩余的东西,包括标记。

【讨论】:

  • 谢谢。这适用于大多数情况,但如果我有 \textcolor{green}{some random text{some other random text} 还有一些更随机的文本},则不会。也就是说,如果我有嵌套的大括号,它就不起作用。我会更新问题,说我需要它来识别匹配的大括号(或括号)。
  • @Nigu:我的版本确实正确处理嵌套的大括号/括号。当然,前提是它们是平衡的
猜你喜欢
  • 2016-10-03
  • 2021-10-12
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多