在vim中全局替换乳胶命令

时间:2012-07-16 13:31:58

标签: regex vim latex

我正在写一篇很长的文档,我经常将一些术语格式化为斜体。过了一段时间后,我意识到现在也许就是我想要的东西所以我想删除所有将文本格式化为斜体的乳胶命令。

示例:

\textit{Vim} is undoubtedly one of the best editors ever made. \textit{LaTeX} is an extremely powerful, intelligent typesetter. \textbd{Vim-LaTeX} aims at bringing together the best of both these worlds

如何运行识别\textit{whatever}所有实例的替换命令,并将其更改为whatever而不影响此示例中的\textbd{Vim-LaTeX}等不同命令?

编辑:从技术上来说,有帮助的答案是来自伊戈尔的答案,我会将那一个标记为正确的答案。然而,康拉德的答案应该被考虑在内,因为它显示了适当的乳胶策略。

2 个答案:

答案 0 :(得分:6)

您不应在文本中使用格式化命令。

LaTeX围绕语义标记的理念而构建。因此,您应该使用函数标记文本,而不是说“此文本应该是斜体”。例如:

\product{Vim} is undoubtedly one of the best editors ever made. \product{LaTeX}
is an extremely powerful, intelligent typesetter. \product{Vim-LaTeX} aims at
bringing together the best of both these worlds

...然后,在您的序言,包或文档类中,您(重新)定义宏\product以设置所需的格式。这样,您可以在您认为必要时调整宏,而无需更改代码。

或者,如果要完全删除格式,只需让宏显示其裸参数:

\newcommand*\product[1]{#1}

答案 1 :(得分:3)

使用此替换命令:

% s/\\textit{\([^}]*\)}/\1/

如果textit可以跨越多行:

%! perl -e 'local $/; $_=<>; s/\\textit{([^}]*)}/$1/g; print;'

你也可以在没有perl的情况下做到这一点:

%s/\\textit{\(\_.\{-}\)}/\1/g

下面:

  • \_. - 包含换行符
  • 的任何符号
  • \{-} - 让*非贪婪。