我有一些Python代码看起来像这样:
rates = {3: [((17500, 99999), Decimal('23425.00'), Decimal('7234.24'))],
4: [(( 0, 3510), Decimal( '4563.00'), Decimal('5234.00')),
(( 3510, 17500), Decimal('34578.00'), Decimal('3464.50')),
((17500, 99999), Decimal('18268.00'), Decimal('5734.66'))],
5: [((17500, 99999), Decimal('83564.00'), Decimal('3475.60'))]}
Run Code Online (Sandbox Code Playgroud)
请注意,十进制值在小数点周围对齐,而整数是右对齐的.
是否有一些软件能够以自动化方式执行这种复杂的对齐?我会对任何接近的东西感兴趣,即使它与上述不完全匹配.
(注意:我不认为以下特别理智.)
在大多数情况下,如果你只是输入(大多数编辑将帮助你对齐你的词典和列表项)你的原始代码,你应该得到这样的东西:
rates = {3: [((17500, 199999), Decimal('23425.00'), Decimal('7234.245'))],
4: [((0, 3510), Decimal('4563.00'), Decimal('5234.00')),
((3510, 17500), Decimal('34578.00'), Decimal('464.50')),
((17500, 99999), Decimal('18268.00'), Decimal('5734.66'))],
15: [((17500, 99999), Decimal('83564.00'), Decimal('3475.60'))]}
Run Code Online (Sandbox Code Playgroud)
(我已经做了一些更长的值,有些更短,以增加更多的怪癖.)
使用Vim 的Tabular插件,按顺序对上面的代码执行以下命令(您可能希望以可视方式阻止它)将以与原始问题匹配的方式格式化上述代码:
:Tab /^[^[(]*\zs[[(]/l0
:Tab /^[^(]*\zs(/l0
:Tab /(\zs\d\+\s*,/l0r1
:Tab /,\s*\zs\d\+)/l1r0
:Tab /['"]\d*\ze\.\d*['"]/l0r0
Run Code Online (Sandbox Code Playgroud)
这些业务是:
[s和(s.(s,这将修复第一个操作的错位.(17500,类似的值,., 99999)类似的值,.'4563.00'类似的值..您可以制作映射以在正常和可视模式下使用:
noremap <leader>ff :Tab /^[^[(]*\zs[[(]/l0<CR>
\:Tab /^[^(]*\zs(/l0<CR>
\:Tab /(\zs\d\+\s*,/l0r1<CR>
\:Tab /,\s*\zs\d\+)/l1r0<CR>
\:Tab /['"]\d*\ze\.\d*['"]/l0r0<CR>
Run Code Online (Sandbox Code Playgroud)
最后结果:
rates = {3: [((17500, 199999), Decimal('23425.00'), Decimal('7234.245'))],
4: [(( 0, 3510), Decimal( '4563.00'), Decimal('5234.00')),
(( 3510, 17500), Decimal('34578.00'), Decimal( '464.50')),
((17500, 99999), Decimal('18268.00'), Decimal('5734.66'))],
15: [((17500, 99999), Decimal('83564.00'), Decimal('3475.60'))]}
Run Code Online (Sandbox Code Playgroud)
显然,这些操作的有效性取决于代码的结构和原始格式,但希望这会激发您的灵感.
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |