一切都在标题中。我有许多用相当过时的语法编写的 LaTeX 文件$foo$
,$$bar$$
我希望将它们分别转换为\\(foo\\)
和\\[bar\\]
. 我正在使用 vim,所以我想一个正则表达式就可以了,但一个脚本也很好。我一直在环顾四周,但没有成功。
编辑:在 kirilloid 的有用回复之后,我想提一下,我也想在这种情况下使用它,foo
不仅bar
是单词,而且是包含空格的表达式(但$
显然没有 s)。
一切都应该被转义:$
已经是一个元字符,应该被转义。()+
应该逃脱工作,因为它们通常在正则表达式中工作。
:%s/\$\$\(\w\+\)\$\$/\\[\1\\]/g
:%s/\$\(\w\+\)\$/\\(\1\\)/g
采用
:%s/\V$$\v(\_.{-})\V$$/\\[\1\\]/g
:%s/\v\$([^$]+)\$/\\(\1\\)/g
与@kirilloid 答案的区别如下:
\v
,禁用需要转义大多数元字符)和非常nomagic(除了反斜杠之外的所有内容都有其字面意义)模式以提高可读性$$
字符串的能力(\_
添加换行符.
,\_.
是唯一真正意味着任何字符的构造,.
不包括换行符)。{-}
(\{-}
在魔法、游牧和非常游牧模式中)是*
.$
: 除换行符之外的任何字符),但它要求您确保$$
始终以大纲公式开头并且$
始终以内联公式开头。%
您可能希望通过在 command 前面替换为{first_line_number},{last_line_number}
或在视觉上选择它们,键入:
('<,'>
将出现在命令行的开头)并继续键入s/...
command 而不用前导来将替换限制为正确的行:%
。