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
),移动到文件的开头(可以用Ctrl – Home或gg
),然后inputgqG
。
gqG
格式化从当前位置开始到文件结束的文本。 它会自动join连续的行,如果可能的话。 如果你不想把这两个连在一起,你可以在两行之间放一个空行。
迈克尔的解决scheme是关键,但我经常发现我想重新格式化当前段落的其余部分; 对于这种行为,使用gq}
。
你可以用任何移动操作符使用gq
。 例如,如果您只想重新格式化为当前行的末尾(即包装光标所在的行),则可以使用gq$
您也可以通过在可视模式下select文本(使用v和移动)然后键入gq来重新格式化。
还有其他选项可以强制线条也包裹。
如果你想让vim在你插入文本的时候换行,而不是等到文件结束才重新构build文本,你会发现这些选项很有用:
:set textwidth=80 :set wrapmargin=2
(不要通过wrap
和wrap
来进行侧面跟踪,这只会重新格式化屏幕上显示的文本,并且不会更改缓冲区中的文本)
如果你正在寻找一种非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
。 我告诉我的学生,它代表“苛政季刊”,一个挑剔的人的杂志。