一切都在标题中。我有许多LaTeX文件使用相当过时的语法$foo$
和$$bar$$
编写,我希望分别在\\(foo\\)
和\\[bar\\]
中进行转换。我正在使用vim,所以我猜一个正则表达式会做,但脚本也会很好。我一直在环顾四周但没有成功。
编辑:关于kirilloid的有用回复,我想提及我也想在foo
和bar
不仅是单词,而是包含空格的表达式(但没有{{ 1}}显然)。
答案 0 :(得分:4)
所有内容都应该被转义:$
已经是一个元字符,应该被转义。 ()+
应该被转义为正常工作,因为它们通常在正则表达式中工作。
:%s/\$\$\(\w\+\)\$\$/\\[\1\\]/g
:%s/\$\(\w\+\)\$/\\(\1\\)/g
答案 1 :(得分:4)
使用
:%s/\V$$\v(\_.{-})\V$$/\\[\1\\]/g
:%s/\v\$([^$]+)\$/\\(\1\\)/g
与@kirilloid答案的不同之处如下:
\v
,禁用需要逃避大多数元字符)和非常无害(除了反斜杠有其字面含义的所有内容)模式以便于阅读$$
字符串(\_
为.
添加换行符,\_.
是唯一真正意味着任何字符的构造,.
不包括换行符。 {-}
(\{-}
处于魔法,无畏和非常狂野的模式中)是*
的非贪婪变体。$
:除了换行符之外),但是您需要确保$$
始终启动大纲公式,$
始终以内联方式开始一。您可以通过将命令前的%
替换为{first_line_number},{last_line_number}
或者直观地选择它们来键入:
('<,'>
将来限制替换为真实的行出现在命令行的开头)并继续键入s/...
命令而不引导:%
。