如何在Vim中将文本包装到一定长度?
让我们谈谈相关的措施。我的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
aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc
etc
我希望它更小:
aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc
我怎样才能得到它?如何设置这样一个块的长度?使用折叠(1)是一种可能性:
:%!fold -w5
结果:
aaaaa
aaaaa
aaa
bbbbb
bbbbb
bbb
ccccc
ccccc
ccc
实际上,您可以做两件事:
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