<p>(<strong>注意:</strong>我不认为以下是特别明智的。)</p>
<p>在大多数情况下,如果您只是键入原始代码(大多数编辑器都会帮助您对齐dict和列表项),您应该得到这样的结果:</p>
<pre><code>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'))]}
</code></pre>
<p>(我将一些值变长,一些值变短,以增加一点古怪。)</p>
<p>使用用于Vim的<a href="http://www.vim.org/scripts/script.php?script_id=3464" rel="nofollow">Tabular</a>插件,在上面的代码上按顺序执行以下命令<em>(您可能希望可视化地阻止它),将以与您最初的问题相匹配的方式格式化上述代码:</p>
^{pr2}$
<p>操作包括:</p>
<ol>
<li>对齐第一个<code>[</code>s和<code>(</code>s</li>
<li>对齐第一个<code>(</code>s,这将修复与第一个操作的不对齐。在</li>
<li>右对齐<code>(17500,</code>上的类似于<code>,</code>的值。在</li>
<li>右对齐<code>, 99999)</code>上的类似于<code>,</code>的值。在</li>
<li>将<code>'4563.00'</code>类值对齐<code>.</code>。在</li>
</ol>
<p>您可以制作一个在普通和可视模式下使用的映射:</p>
<pre><code>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>
</code></pre>
<p>最终结果:</p>
<pre><code>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'))]}
</code></pre>
<p>显然,这些操作的有效性取决于代码的结构和原始格式,但希望这能启发您。在</p>