vim命令重组/强制文本到80列

我知道有一些方法可以使用set textwidth自动设置vim中的文本set textwidth (就像Vim 80的列布局一样 )。 我正在寻找的东西类似于= (缩进线命令),但要包装到80.用例有时你用textwidth编辑文本,join线或删除/添加文本后,它出现了很差的包装。

理想情况下,这个命令将完全重新组织我select的行,切断长行而添加短行。 一个例子:

 long line is long! short 

运行命令后(假定换行是13列):

 long line is long! short 

如果这是不可能的真正的VIM命令,也许有一个命令行程序这样做,我可以pipeinput?

search后,我发现这个参考有更多的select: http : //www.cs.swarthmore.edu/help/vim/reformatting.html

textwidth设置为80( :set textwidth=80 ),移动到文件的开头(可以用CtrlHomegg ),然后inputgqG

gqG格式化从当前位置开始到文件结束的文本。 它会自动join连续的行,如果可能的话。 如果你不想把这两个连在一起,你可以在两行之间放一个空行。

迈克尔的解决scheme是关键,但我经常发现我想重新格式化当前段落的其余部分; 对于这种行为,使用gq}

你可以用任何移动操作符使用gq 。 例如,如果您只想重新格式化为当前行的末尾(即包装光标所在的行),则可以使用gq$

您也可以通过在可视模式下select文本(使用v和移动)然后键入gq来重新格式化。

还有其他选项可以强制线条也包裹。

如果你想让vim在你插入文本的时候换行,而不是等到文件结束才重新构build文本,你会发现这些选项很有用:

 :set textwidth=80 :set wrapmargin=2 

(不要通过wrapwrap来进行侧面跟踪,这只会重新格式化屏幕上显示的文本,并且不会更改缓冲区中的文本)

如果你正在寻找一种非Vim的方式,总是有UNIX命令fmt和par 。

笔记:

  • 我不能评论Unicode,它可能会或可能不会有不同的performance。
  • @nelstrom已经提到在他的networking广播中使用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

感谢来自DonaldSmith的评论,我发现这一点,因为textwidth选项没有重新格式化我的长文本行(我正在转换播放与hex转换):

:%!fold -w 60

整个文件(这是我的一行)重新格式化成长度为60的行。

几乎总是我在视觉模式下使用gq 。 我告诉我的学生,它代表“苛政季刊”,一个挑剔的人的杂志。