如何在#2列上包装文本

时间:2012-04-02 06:38:34

标签: shell vim

我有一个文本文件:

Function        Description

concat          Returns the concatenation of the arguments.

contains        Returns true if the first argument string contains the second argument string; otherwise returns false.

我想将文本包装在#2列上,结果应为:

Function        Description

concat          Returns the concatenation
                of the arguments.

contains        Returns true if the first
                argument string contains 
                the second argument
                string; otherwise returns
                false.

如何快速在vimshell中执行此操作?感谢您的任何建议。

3 个答案:

答案 0 :(得分:3)

使用indentexpr选项可以在Vim中轻松解决该问题。组 它为第一列指定的字符数

:set inde=16

然后像往常一样使用gqgw系列命令格式化文本。

答案 1 :(得分:1)

我认为这不符合“快速”的条件,我希望那里的人有更好的答案,但这是我在vim中想到的最好的:

1)将textwidth设置为第二列的所需宽度:

:set tw=60

2)用特殊的东西标记第一列的单词(以后删除 - 任何非正常的文本都可以,我在这里使用jjj)(使用g!/^$/忽略空行):

:%g!/^$/s/^/jjj/

3)将第二列文本放在另一行:

:%s/ \</ \r/

4)将所有第二列线重新包装到所需的宽度:

:%g!/^jjj/normal gqq

5)使用第一列单词加入每个第二列段落的第一行(应该保留开头第一列单词之后的空格):

:%g/^jjj/join

6)将所有剩余的第二列行缩进适当的数量以排列它们(使用但需要很多>> - 可能有办法让vim检查最后一列的长度line并插入该空格数而不是使用此方法):

:%g!/^jjj/normal >>>>>>>>

7)最后从第一列中删除第一列标记:

:%s/^jjj//

不值得为你的例子,但如果文件足够大,它比手工做好...

答案 2 :(得分:0)

:set tw=80 #or :set textwidth=80

将文本换行到80个字符。

然后你可以输入命令模式:

gg #go to the top

然后

gqG #apply reformat to the end

参考: http://www.cs.swarthmore.edu/help/vim/reformatting.html