我目前正在使用 Vim 用 LaTeX 编写数学文本,这涉及到很多矩阵。我的问题的关键在于,命令
\dots
应该在数学环境中随处使用,用于打印 3 个连续点 (…
),并自动处理对齐,但无论何时它看起来都不太好(我认为)用于类似矩阵的环境中。
因此,我想将所有类似矩阵环境中发生的
\dots
的所有实例更改为 \cdots
。
我使用的所有类似矩阵的环境都以单词
matrix
结尾,所以我尝试了以下操作:
:s%/\(\\begin{.*matrix}.*\)\\dots\(.*\\end{.*matrix}\)/\1\\cdots\2/g
但是,它并没有像我希望的那样工作,因为它一次只更改一个实例(在每个矩阵环境中),并且似乎模式匹配只发生在一行上,从而阻止了所有实例的写法
\begin{pmatrix}
1 & 2 & 3 & \dots & n \\
2 & 1 & 2 & \dots & n-1 \\
3 & 2 & 1 & \dots & n-2 \\
\vdots & \vdots & \vdots & \ddots &\vdots \\
n & n-1 & n-2 & \dots & 1
\end{pmatrix}
待更正...
我对 Vim 的经验不是很丰富,但我怀疑我提到的第二个问题应该是相当标准的解决方案,并且第一个问题可能可以使用一些解决方法来解决?
只解决第二个问题是可以接受的,因为我想我不会编写超过 10 行的矩阵,所以我可以简单地运行命令 10 次来处理第一个问题。但是,我非常感谢有一种方法可以解决这两个问题(在有限数量的步骤中,不依赖于我们搜索的单词出现的次数),因为这对于其他情况会很有趣(例如替换所有出现的单词)括号中是另一个词)。
:s%/…
是拼写错误还是您实际输入的内容?我希望是:%s/…
。
另外,(固定?)命令:
:%s/\(\\begin{.*matrix}.*\)\\dots\(.*\\end{.*matrix}\)/\1\\cdots\2/g
抛出:
E486: Pattern not found: \(\\begin{.*matrix}.*\)\\dots\(.*\\end{.*matrix}\)
这里。
无论如何,在这种情况下,单一替换对我来说似乎并不合适,因为您的要求有点难以表达为单一模式。相反,我会用
:help :global
来完成,这有助于我将问题分解为可管理的块:
:g/\\begin{.*matrix/.,/\\end{.*matrix/s/\\dots/\\cdots/g
地点:
:g/<pattern>/<command>
在 <command>
匹配的每一行执行 <pattern>
,\\begin{.*matrix
是与每个矩阵开头匹配的 <pattern>
,.,/\\end{.*matrix/s/\\dots/\\cdots/g
是在每条匹配行上执行的 <command>
,.,/\\end{.*matrix/
是赋予:help :range
的:help :s
,覆盖从匹配行(.
)到矩阵末尾(/\\end{.*matrix/
)的每一行,