我知道有一些方法可以自动设置vim中文本的宽度set textwidth(比如Vim 80列布局问题).我正在寻找的东西类似于=(缩进行命令),但是要换行到80.用例有时你用textwidth编辑文本,在连接行或删除/添加文本之后,它的包装很差.
理想情况下,此命令将完全重新组织我选择的行并切断长行,同时添加短行.一个例子:
long line is long!
short
Run Code Online (Sandbox Code Playgroud)
运行命令后(假设换行为13列):
long line is
long! short
Run Code Online (Sandbox Code Playgroud)
如果使用真正的vim命令无法做到这一点,也许有一个命令行程序可以执行此操作,我可以将输入传递给?
搜索后我发现这个参考文献有更多选项:http://www.cs.swarthmore.edu/help/vim/reformatting.html
Mic*_*sen 352
设置textwidth为80(:set textwidth=80),移动到文件的开头(可以使用Ctrl- Home或gg),然后键入gqG.
gqG格式化从当前位置开始到文件末尾的文本.它将尽可能自动连接连续行.如果您不希望将这两行连接在一起,则可以在两行之间放置一个空行.
Ale*_*zel 90
迈克尔的解决方案是关键,但我经常发现我想重新格式化当前段落的其余部分; 对于这种行为,请使用gq}.
Joh*_*nGH 35
您可以使用gq任何移动操作员.例如,如果您只想重新格式化到当前行的末尾(即包装光标所在的行),您可以使用gq$
您还可以通过在可视模式下选择文本(使用"v并移动")然后键入gq来重新格式化.
还有其他选项可以强制换行.
如果你希望vim在你插入文本时包装你的行,而不是必须等到最后重构文本,你会发现这些选项很有用:
:set textwidth=80
:set wrapmargin=2
Run Code Online (Sandbox Code Playgroud)
(不要扯到wrap和linebreak,只有重新在屏幕上显示的文本,并且不改变缓冲区文本)
she*_*n89 18
感谢DonaldSmith的评论,我发现了这个,因为该textwidth选项没有重新格式化我的长文本(我正在转换使用十六进制到字节的转换):
:%!fold -w 60
将整个文件(对我来说是一行)重新格式化为长度为60的行.
Eht*_*ury 13
如果您正在寻找非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
Run Code Online (Sandbox Code Playgroud)
从Vim内部使用:
:%! fmt -w 13
:%! par 13gr
Run Code Online (Sandbox Code Playgroud)
您也可以设置:formatprg为par或fmt并覆盖gq.有关更多信息,请:help formatprg在Vim内部进行调用.