在Vim中使用smartindent时重新格式化的段落

时间:2014-05-20 12:07:46

标签: vim formatting indentation

在Vim 7.4中,如何在使用gq}选项时使用set smartindent命令以下列方式重新格式化段落(我需要该选项)?

  • 在重新格式化之前:

    1     Sed ut perspiciatis, unde omnis iste natus error sit voluptatem
      accusantium doloremque laudantium, totam rem aperiam eaque ipsa,
      quae ab illo inventore veritatis et quasi architecto beatae vitae
      dicta sunt, explicabo.
    2     Nemo enim ipsam voluptatem, quia voluptas
      sit, aspernatur aut odit aut fugit, sed quia consequuntur magni
      dolores eos, qui ratione voluptatem sequi nesciunt, neque porro
      quisquam est, qui dolorem ipsum, quia dolor sit, amet,
      consectetur, adipisci velit, sed quia non numquam eius modi
      tempora incidunt, ut labore et dolore magnam aliquam quaerat
      voluptatem.
    
  • 重新格式化后(我想要的) - 注意行号:

     1     Sed ut perspiciatis, unde omnis iste natus error sit voluptatem
     2 accusantium doloremque laudantium, totam rem aperiam eaque ipsa,
     3 quae ab illo inventore veritatis et quasi architecto beatae vitae
     4 dicta sunt, explicabo.
     5     Nemo enim ipsam voluptatem, quia voluptas
     6 sit, aspernatur aut odit aut fugit, sed quia consequuntur magni
     7 dolores eos, qui ratione voluptatem sequi nesciunt, neque porro
     8 quisquam est, qui dolorem ipsum, quia dolor sit, amet,
     9 consectetur, adipisci velit, sed quia non numquam eius modi
    10 tempora incidunt, ut labore et dolore magnam aliquam quaerat
    11 voluptatem.
    

使用set formatoptions=qw,我得到了所需的结果(块'重新格式化后')。但是如果我添加选项set smartindent,段落的每一行都会缩进(我得到的):

 1     Sed ut perspiciatis, unde omnis iste natus error sit
 2     voluptatem accusantium doloremque laudantium, totam rem
 3     aperiam eaque ipsa, quae ab illo inventore veritatis et quasi
 4     architecto beatae vitae dicta sunt, explicabo.
 5     Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut 
 6     odit aut fugit, sed quia consequuntur magni dolores eos, qui 
 7     ratione voluptatem sequi nesciunt, neque porro quisquam est, 
 8     qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci 
 9     velit, sed quia non numquam eius modi tempora incidunt, ut 
10     labore et dolore magnam aliquam quaerat voluptatem.

2 个答案:

答案 0 :(得分:2)

关闭smartindent。请勿将其替换为autoindent。对于简单(散文)案例中的任何后续行,这两个选项都将使用第1行的缩进。 smartindent实际上非常糟糕,而且大部分气馁;它已被cindent和基于表达式的缩进(通过indentexpr)替换。大多数情况下,您实际上可以启用特定于文件类型的缩进规则,但我不知道散文中存在任何规则。

答案 1 :(得分:1)

如果你想在散文中自动缩进,我建议使用'autoindent'而不是'smartindent'(实际上并不是很聪明)。将其与2设置中的'formatoptions'相结合,您可以重新格式化现有的多行段落,并且第二行及以上的缩进保持正确。

但我知道无法配置Vim,以便缩进第一行而不是其他行。您需要手动设置第一行或第二行的缩进,然后Vim可以正确格式化其余行。