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

wic*_*ken 225 vim word-wrap

我知道有一些方法可以自动设置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- Homegg),然后键入gqG.

gqG格式化从当前位置开始到文件末尾的文本.它将尽可能自动连接连续行.如果您不希望将这两行连接在一起,则可以在两行之间放置一个空行.

  • 它也适用于视觉选择.就像这样:`V} gq`.通过这种方式,您可以在实际格式化之前看到要格式化的内容. (12认同)
  • 使用`set tw = 80`代替`set textwidth = 80`来节省时间 (7认同)
  • 顺便说一下,`q`究竟是什么呢? (4认同)
  • @dmranck在`set textwidth = 76`之后,你的行会在输入时自动换行.我的抱怨是它对正在编辑的现有行没有任何作用.但是`V} gq`在这方面非常有用.`V`进入视觉选择模式,`}`选择下一个段落,`gq`执行当前格式化程序(或使用`gw`显式调用vi格式化程序).此外,`{`将向上选择.您可以使用`ggVGgq`选择整个文档和格式,尽管可能有更简单的方法.使用`@`将其保存为宏以使其更容易.使用`vipgq`来fmt当前段落. (4认同)

Ale*_*zel 90

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

  • 扩展这个 - 您可以使用gq <motion>格式化您想要的任何内容. (15认同)

Joh*_*nGH 35

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

您还可以通过在可视模式下选择文本(使用"v并移动")然后键入gq来重新格式化.

还有其他选项可以强制换行.

如果你希望vim在你插入文本时包装你的行,而不是必须等到最后重构文本,你会发现这些选项很有用:

:set textwidth=80
:set wrapmargin=2
Run Code Online (Sandbox Code Playgroud)

(不要扯到wraplinebreak,只有重新在屏幕上显示的文本,并且不改变缓冲区文本)

  • 来自`wrapmargin` help:当'textwidth'非零时,不使用此选项. (9认同)

she*_*n89 18

感谢DonaldSmith的评论,我发现了这个,因为该textwidth选项没有重新格式化我的长文本(我正在转换使用十六进制到字节的转换):

:%!fold -w 60

将整个文件(对我来说是一行)重新格式化为长度为60的行.

  • 这非常好。所有答案都集中在当一行将空格分割为单词时限制行的宽度。该解决方案适用于非常长的单词(DNA 序列)。 (2认同)

Eht*_*ury 13

如果您正在寻找非Vim方式,那么总是有UNIX命令fmtpar.

笔记:

  • 我不能评论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
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内部进行调用.


ncm*_*ist 6

几乎我总是gq在可视模式下使用。我告诉我的学生,这是一本面向挑剔的人的杂志“先生们的季刊”。