如何在Vim中将文本换成一定长度?

Léo*_* 준영 100 vim indentation

我们来谈谈相关措施.我的Vim看起来像:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc
Run Code Online (Sandbox Code Playgroud)

我希望它更小:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc
Run Code Online (Sandbox Code Playgroud)

我怎么才能得到它?我如何管理设置这样一个块的长度?

sle*_*ske 176

你实际上可以做两件事:

  1. 通过插入换行符,让vim格式化(即更改)您的文本以获得更短的行
  2. 保持原样,但显示它们已包装

你要哪个?

选项1将通过设置textwidth(例如:set textwidth=30(来自Swaarop的答案))来实现.然后,您可以通过突出显示文本(在可视模式下)并键入来重新格式化文本gq.(textwidth可缩写为tw,从而:set tw=30.)

可以通过运行:set wrap/ 来切换选项2 :set nowrap.这将包裹对于窗口来说太长的行.

两者都是独立的.

  • 来自可视模式的gq key命令+1,这非常有用 (33认同)
  • 同样有用的是`gq}` - 格式到段落的末尾. (25认同)
  • 仅供参考,即使tw = 5,gqg对空格也不会对问题中显示的行做任何事情. (3认同)
  • @Dlamblin:正确.如果你想要精确地折叠给定的宽度,而不考虑空格,那么在fgm的答案中使用`fold`命令. (2认同)

Vla*_*aru 60

设置'textwidth'后,您可以选择具有可视模式的文本并按gq以很好地包装它(您也可以在某些旧/旧配置上使用Q).

一些有用的提示:

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq
Run Code Online (Sandbox Code Playgroud)

  • 我认为第二个命令实际上应该是`gq}`. (4认同)
  • +1,我在vim中意外地击中了gq,过了半个小时试图看看我击中了什么.这非常有用. (3认同)

Fri*_*ner 21

使用fold(1)是一种可能性:

:%!fold -w5 
Run Code Online (Sandbox Code Playgroud)

结果:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc
Run Code Online (Sandbox Code Playgroud)

  • @Lionel:是的.要尊重空格,请在fold命令中添加选项"-s". (7认同)
  • 这假设安装了`fold`命令. (4认同)

Swa*_*C H 14

:set textwidth=30
Run Code Online (Sandbox Code Playgroud)

  • @Andy`textwidth`不会处理无空间情况.你可以编写自己的`formatexpr`函数来做到这一点. (3认同)

kth*_*thy 8

如果你有没有空格的文本要打破一定的长度,既不需要使用外部fold也不需要编写自己的文本formatexpr.

:%s/\(.\{80\}\)/\1\r/g

将打破80个字符的所有行.

  • 这在恢复 OpenSSL 证书的同时挽救了我的一天。谢谢 (2认同)