我知道有一些方法可以在vim中使用set textwidth自动设置文本的宽度(就像vim 80的列布局问题)。我要找的是类似于=(缩进行命令)的东西,但要将其换行到80。用例是有时你用textwidth编辑文本,在加入行或删除/添加文本后,它出来的包装很差。
理想情况下,这个命令将完全重新组织我选择的行,并删除长行,同时添加短行。一个例子:
long line is long!
short
运行命令后(假设wrap是13 cols):
long line is
long! short
如果这是不可能与一个真正的vim命令,也许有一个命令行程序,这是我可以管道输入?
经过搜索,我找到了这个参考,它有更多的选项:http://www.cs.swarthmore.edu/help/vim/reformatting.html
您可以将gq与任何移动操作符一起使用。例如,如果你只想重新格式化到当前行的末尾(即换行光标所在的行),你可以使用gq$
您还可以通过在可视模式下选择文本(使用' v并移动)然后输入gq来重新格式化。
还有其他选项可以强制换行。
如果你想要vim包装你的行,而你正在插入文本,而不是等到最后重组文本,你会发现这些选项很有用:
:set textwidth=80
:set wrapmargin=2
(不要被换行和换行打断,它们只会重新格式化屏幕上显示的文本,并且不会改变缓冲区中的文本)
如果您正在寻找一种非vim的方式,总是可以使用UNIX命令fmt和par。
注:
我不能评论Unicode,它的行为可能不同,也可能不同。
@nelstrom已经在他的网络直播中提到了使用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。