我知道有些方法可以使用set textwidth
(如Vim 80 column layout concerns)自动设置文本的宽度。我正在寻找的东西类似于=
(缩进行命令),但是要换行到80.用例有时你用textwidth编辑文本,加入行或删除/添加文本之后它就会被包裹得很糟糕
理想情况下,此命令将完全重新组织我选择的行并切断长行,同时添加短行。一个例子:
long line is long!
short
运行命令后(假设换行为13列):
long line is
long! short
如果使用真正的vim命令无法做到这一点,也许有一个命令行程序可以执行此操作,我可以将输入传递给?
搜索后,我发现此参考文献有更多选项:http://www.cs.swarthmore.edu/help/vim/reformatting.html
答案 0 :(得分:343)
将textwidth
设置为80(:set textwidth=80
),移至文件的开头(可以使用 Ctrl - Home 或{ {1}}),然后输入gg
。
gqG
格式化从当前位置开始到文件末尾的文本。它将尽可能自动连接连续行。如果您不希望将这两行连接在一起,则可以在两行之间放置一个空行。
答案 1 :(得分:88)
迈克尔的解决方案是关键,但我经常发现我想重新格式化其余部分
当前段落;对于此行为,请使用gq}
。
答案 2 :(得分:31)
您可以将gq
与任何移动运算符一起使用。例如,如果您只想重新格式化到当前行的末尾(即包装光标所在的行),则可以使用gq$
您还可以通过在可视模式下选择文本(使用“v并移动”)然后键入gq来重新格式化。
还有其他强制换行的选项。
如果你希望vim在你插入文本时包装你的行,而不是必须等到最后重新构建文本,你会发现这些选项很有用:
:set textwidth=80
:set wrapmargin=2
(不要被wrap
和linebreak
旁边跟踪,只会重新格式化屏幕上显示的文字,而不会更改缓冲区中的文字。
答案 3 :(得分:17)
感谢DonaldSmith的评论,我发现了这一点,因为textwidth
选项没有重新格式化我的长文本(我正在转换使用十六进制到字节的转换):
:%!fold -w 60
将整个文件(对我而言是一行)重新格式化为长度为60的行。
答案 4 :(得分:12)
如果您正在寻找非Vim 方式,则始终有UNIX命令fmt和par。
注意:
par
。以下是我们如何将两者用于您的示例。
$ echo -e 'long line is long!\nshort' > 3033423.txt
$ cat 3033423.txt
long line is long!
short
$ fmt -w 13 3033423.txt
long line is
long! short
$ par 13gr 3033423.txt
long line is
long! short
从Vim内部使用:
:%! fmt -w 13
:%! par 13gr
您还可以将:formatprg
设置为par或fmt并覆盖gq
。有关详细信息,请在Vim中调用:help formatprg
。
答案 5 :(得分:5)
我几乎总是在视觉模式下使用gq
。我告诉我的学生,它代表着“Gentlemens'Seasonly”,这是一本针对挑剔人士的杂志。