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

让我们谈谈相对的测量方法。我的 Vim 看起来像:

aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc
etc

我希望它能小一点:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

我怎样才能得到它? 我怎样才能设置这样一个块的长度?

57181 次浏览

Using fold(1) is one possibility:

:%!fold -w5

Result:

aaaaa
aaaaa
aaa
bbbbb
bbbbb
bbb
ccccc
ccccc
ccc
:set textwidth=30

You can actually do two things:

  1. Let vim format (i.e.change) your text to have shorter lines, by inserting linebreaks
  2. Leave lines as they are, but display them wrapped

Which do you want?

Option 1 would be achieved by setting textwidth (for example :set textwidth=30 (from Swaarop's answer)). Then you can reformat your text by highlighting it (in visual mode) and typing gq. (textwidth can be abbreviated as tw, thus :set tw=30.)

Option 2 can be toggled by running :set wrap / :set nowrap. This will wrap lines which are too long for the window.

Both are independent.

Once you set 'textwidth', you can select text with visual mode and press gq to wrap it nicely (you can also use Q on some older/legacy configurations).

A few useful tips:

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

If you have text without spaces that you want to break at a certain length, it is neither necessary to use external fold nor write your own formatexpr.

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

will break all lines at 80 chars.

First, set textwidth to 5 with

:set tw=5

Then, press gqap to format a paragraph