Vim格式文本(中断线)智能固定长度

时间:2015-10-03 21:03:55

标签: vim format idl paragraph

我已经获得了一个巨大的代码库,其中之前的开发人员没有遵循80个字符的长度。我试图通过延续将很长的线条分成多行。这是一种IDL语言。

之前

test_function, variable1, variable2, variable3, variable4, variable5, variabl6, variable7, vaiable8, variable9, variable10, ...

test_function, variable1, variable2, variable3, variable4, $
    variable5, variable6, variable7, variable8, variable9,  $
    variable10

我使用formatprgthis来格式化段落。我正在寻找一种方法,以便在comma处约80个字符(并且可能添加延续($)符号)中断(明智地)线。这将节省大量时间,因为我不必手动将这些1000行分成80个字符。

谢谢。

2 个答案:

答案 0 :(得分:1)

这是您的问题的答案:https://stackoverflow.com/a/1272247/5152421

Vim很容易做到这一点。

gq{motion} % format the line that {motion} moves over
{Visual}gq % format the visually selected area
gqq        % format the current line
...

我建议您查看:help gq:help gw

另外,设置textwidth(tw)会在打字时超出时自动换行。它也在gq中使用,但是如果禁用gq则会在窗口大小上打破,或者79取决于哪个会先出现。

:set tw=80

答案 1 :(得分:0)

我不知道如何通过格式化选项来设置它,但这种解决方法可以完成这项工作

:%s/\%>68c \%<78c/ $\r/

这意味着在列68(%s)和78()之间用空格和%>68c替换(%<78c)匹配空格($)换行(\r)。 78因为在行尾添加了两个字符。

:h \%c

还有一些评论可以保留,所以在运行第一次替换之前,请运行此命令

:%s/\(^\s\{-};\).*\%>68c\zs \%<78c/\r\1 /

这意味着替换以;开头的行(可能还有一些空格(\s\{-})),在第68列到第78列之后开始匹配(\zs),从头开始直到;\(^\s\{-};\))的行,并在换行后传递(\1)。

:h \s :h \{ :h \zs :h \(