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

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

最佳答案


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

与@kirilloid 答案的区别如下:
  • 使用非常神奇( \v ,禁用需要转义大多数元字符)和非常神奇(除反斜杠外的所有内容都有其字面含义)模式以提高可读性
  • 处理多行 $$ 字符串的能力( \_. 添加换行符,\_. 是唯一真正表示任何字符的结构,. 不包括换行符)。 {-}(在magic、nomagic 和very nomagic 模式下为\{-})是* 的非贪婪变体。
  • 这些字符串之间可能有任何字符( $ : any but newline),但它要求您确保 $$ 始终以大纲公式开头,而 $ 始终以行内公式开头。您可能希望通过将命令前面的 % 替换为 {first_line_number},{last_line_number} 或在视觉上选择它们,键入 : ( '<,'> 将出现在命令行的开头)并继续键入 s/... 命令而不带前导来将替换限制为正确的行:%
  • 关于vim - 如何将字符串 $foo$ 转换为\(foo\) 并将 $$bar$$ 转换为\[bar\],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10069982/

    10-12 17:25
    查看更多