假设我有一个这样的公式(在 LaTeX 或 Maple 或其他文本系统中):
Result: ((6*(k2+k3))*A123*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*(exp(-k3*(k3^2*t-x)))^2+6*A12*(-k3+k2)*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*exp(-k3*(k3^2*t-x)))*(exp(-k2*(k2^2*t-x)))^2+(-(6*(-k3+k2))*A13*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*(exp(-k3*(k3^2*t-x)))^2-(6*(k2+k3))*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*exp(-k3*(k3^2*t-x)))*exp(-k2*(k2^2*t-x))
注意:上述公式只是枫叶计算结果的一部分,由于项太多,我无法将它们分解。
显然,它很难读。我想要做的是将匹配的括号逐级折叠。如果把所有括号都折叠起来,我就能清楚地找出有多少项。然后我就可以从顶层分析到每个项的细节。但我只是不知道如何实现这一点。也许有一些现有的软件可以将这种复杂的公式可视化。有什么想法吗?
PS 我使用 Linux 系统。开源替代方案更好。
答案1
有一个名为 vim 脚本foldcol.vim但我不能再多说了。
我个人会这样做:
"put every calculs on one line
:%s/(/\r(\r/g
:%s/)/\r)\r/g
"delete all empty lines
:g/^$/d
"set fold as () to collapse them with "za"
:set foldmethod=marker foldmarker=(,)
"indent all text:
gg=G
它看起来应该是这样的:
结果: ( ( 6*( 键数 ) ) *A123*k2*k3*( A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2 ) *( 。 。 。
处理完毕后,删除缩进:转到第一行,然后按:
gg<G............ "need to press dot to repeat
500gJ "to put all on one line
答案2
折叠仅适用于多行。对于单行,您最好使用最近的隐藏功能;不幸的是,它需要更多的脚本来设置,可能会干扰现有的语法突出显示,并且您没有方便的“显示(更多/更少)折叠”映射。
你可能已经意识到匹配项Vim 附带的插件。还有类似这样的插件彩虹括号.vim从而改善这一点。