我有一个文本文件:
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.
如何快速在vim
或shell
中执行此操作?感谢您的任何建议。
答案 0 :(得分:3)
使用indentexpr
选项可以在Vim中轻松解决该问题。组
它为第一列指定的字符数
:set inde=16
然后像往常一样使用gq
或gw
系列命令格式化文本。
答案 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