如何将字符串$ foo $转换为\(foo \)和$$ bar $$转换为\ [bar \]

时间:2012-04-09 06:57:43

标签: vim latex

一切都在标题中。我有许多LaTeX文件使用相当过时的语法$foo$$$bar$$编写,我希望分别在\\(foo\\)\\[bar\\]中进行转换。我正在使用vim,所以我猜一个正则表达式会做,但脚本也会很好。我一直在环顾四周但没有成功。

编辑:关于kirilloid的有用回复,我想提及我也想在foobar不仅是单词,而是包含空格的表达式(但没有{{ 1}}显然)。

2 个答案:

答案 0 :(得分:4)

所有内容都应该被转义:$已经是一个元字符,应该被转义。 ()+应该被转义为正常工作,因为它们通常在正则表达式中工作。

:%s/\$\$\(\w\+\)\$\$/\\[\1\\]/g
:%s/\$\(\w\+\)\$/\\(\1\\)/g

http://vim.wikia.com/wiki/Search_and_replace

答案 1 :(得分:4)

使用

:%s/\V$$\v(\_.{-})\V$$/\\[\1\\]/g
:%s/\v\$([^$]+)\$/\\(\1\\)/g

与@kirilloid答案的不同之处如下:

  1. 使用非常神奇(\v,禁用需要逃避大多数元字符)和非常无害(除了反斜杠有其字面含义的所有内容)模式以便于阅读
  2. 能够应对多行$$字符串(\_.添加换行符,\_.是唯一真正意味着任何字符的构造.不包括换行符。 {-}\{-}处于魔法,无畏和非常狂野的模式中)是*的非贪婪变体。
  3. 这些字符串之间可能存在任何字符($:除了换行符之外),但是您需要确保$$始终启动大纲公式,$始终以内联方式开始一。您可以通过将命令前的%替换为{first_line_number},{last_line_number}或者直观地选择它们来键入:'<,'>将来限制替换为真实的行出现在命令行的开头)并继续键入s/...命令而不引导:%