如何在Vim中将文本包装到一定长度?

如何在Vim中将文本包装到一定长度?,vim,indentation,Vim,Indentation,让我们谈谈相关的措施。我的Vim看起来像: aaaaaaaaaaaaa bbbbbbbbbbbbb ccccccccccccc etc 我希望它更小: aaaaa aaaaa bbbbb bbbbb ccccc ccccc etc 我怎样才能得到它?如何设置这样一个块的长度?使用折叠(1)是一种可能性: :%!fold -w5 结果: aaaaa aaaaa aaa bbbbb bbbbb bbb ccccc ccccc ccc 实际上,您可以做两件事: 通过插入换行符,让v

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

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc
我希望它更小:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc
我怎样才能得到它?如何设置这样一个块的长度?

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

:%!fold -w5 
结果:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

实际上,您可以做两件事:

  • 通过插入换行符,让vim格式化(即更改)文本,使其具有较短的行
  • 保留行的原样,但将其包装显示
  • 你想要哪个

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

    通过运行
    :set wrap
    /
    :set nowrap
    ,可以切换选项2。这将环绕对窗口来说太长的线条


    两者都是独立的。

    一旦设置了“textwidth”,您就可以使用可视模式选择文本,然后按gq将其很好地包装起来(您也可以在一些较旧/传统的配置上使用Q)

    以下是一些有用的提示:

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

    如果文本中没有空格,您希望按一定长度打断,则无需使用外部
    折叠
    ,也无需编写自己的
    formatexpr

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


    将以80个字符断开所有行。

    首先,使用

    :set tw=5
    

    然后,按gqap设置段落格式

    你是指换行文本,而不是缩进文本吗?lc:我不知道区别。我本来打算按照它向我推荐的那样写wrap,但我从来没有让它工作过。textwidth在没有空格的情况下如何处理它,就像原始海报的示例一样?我有一个剧本,它似乎只有在有空格的情况下(或者假设breakat变量设置为其他值)才会基于textwidth进行格式化。@Andy
    textwidth
    不会处理没有空格的情况。您可以编写自己的
    formatexpr
    函数来实现这一点。+1对于视觉模式下的gq键命令,这非常有用,因为这会在空格上中断,gqgq不会对问题中所示的行执行任何操作,即使tw=5。@Dlamblin:正确。如果你想完全按照给定的宽度折叠,而不考虑空格,那么使用fgm的答案中的
    折叠
    命令。我认为你的选项不起作用<代码>换行将在窗口边界换行,而不是在
    textwidth
    @DerWeh:是的,换行将在窗口边界换行。我编辑以澄清。这也不尊重空间folding@Lionel:是的。为了尊重空格,请在fold命令中添加选项“-s”。+1,我在vim中意外击中gq,我花了半个小时试图查看我击中的是什么。这非常有用。
    gqq
    也会包装当前行(而不是
    gqgq
    gq$
    )。这是当您有需要包装的现有文本时对我有效的唯一答案。其他答案设置了配置,而不是强制包装现有文本。这在恢复OpenSSL证书时节省了我的时间。非常感谢。
    :set tw=5