4

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

编辑:在 kirilloid 的有用回复之后,我想提一下,我也想在这种情况下使用它,foo不仅bar是单词,而且是包含空格的表达式(但$显然没有 s)。

4

2 回答 2

4

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

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

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

于 2012-04-09T07:06:50.597 回答
4

采用

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

与@kirilloid 答案的区别如下:

  1. 使用非常神奇(\v,禁用需要转义大多数元字符)和非常nomagic(除了反斜杠之外的所有内容都有其字面意义)模式以提高可读性
  2. 处理多行$$字符串的能力(\_添加换行符.\_.是唯一真正意味着任何字符的构造,.不包括换行符)。{-}\{-}在魔法、游牧和非常游牧模式中)是*.
  3. 这些字符串之间可能有任何字符($: 除换行符之外的任何字符),但它要求您确保$$始终以大纲公式开头并且$始终以内联公式开头。%您可能希望通过在 command 前面替换为{first_line_number},{last_line_number}或在视觉上选择它们,键入:'<,'>将出现在命令行的开头)并继续键入s/...command 而不用前导来将替换限制为正确的行:%
于 2012-04-09T14:32:36.623 回答