在vim中自动换行而不插入新行

12
如何设置vim在不插入换行符的情况下自动折行?
基本上:
- 我想要一个最大宽度,比如80行 - 当我打出一段话时,如果一个单词超过了80行的标记,它应该包含整个单词(不要分割单词) - 如果我输入超过几行,它仍然应该自动换行 - 如果我保存文件,在编辑模式下输入时,除非我明确地按Enter键,否则不应该看到任何换行符
我可以通过以下方法得到部分这种行为:
:set textwidth=80
:set wrap

除了这个会插入新的一行,而我不想它插入新的一行。我已经尝试过这个方法,但它没有起作用。

是的,这很简单:将您的窗口宽度缩小到80个字符。 - romainl
为了使这个建议真正有用:请记住,您可以通过按下 80 CTRL-W v(或键入 :80vsplit)来创建所需宽度的分割。请注意,这是总窗口宽度,因此实际文本可能会因 'number''relativenumber''foldcolumn'等而变窄。 - Alexander Batischev
@romainl 这将违反第二条,因为整个单词不会被换行。 - antimatter
@AlexanderBatischev 是的,这就是我一直在做的,但这有点像黑客,不是吗?看起来应该有更好的方法。 - antimatter
@gyeh,这绝对是一种hack,但需求本身非常不寻常。你确定这不是一个XY问题吗?你能解释一下为什么需要这样的包装模式吗? - Alexander Batischev
2个回答

37

如果您在插入模式下的目标是自动将文本(仅视觉上)软换行到窗口边缘:

set number # (optional - will help to visually verify that it's working)
set textwidth=0
set wrapmargin=0
set wrap
set linebreak # (optional - breaks by word rather than character)

如果您在输入插入模式下的目标是在80列处自动进行硬换行(通过在实际文本文件中插入新行):

set number # (optional - will help to visually verify that it's working)
set textwidth=80
set wrapmargin=0
set formatoptions+=t
set linebreak # (optional - breaks by word rather than character)

如果您在插入模式下的目标是在80列处自动软换行(仅视觉上),请执行以下操作:
set number # (optional - will help to visually verify that it's working)
set textwidth=0
set wrapmargin=0
set wrap
set linebreak # (optional - breaks by word rather than character)
set columns=80 # <<< THIS IS THE IMPORTANT PART

后者花费了我2-3个大量搜索互联网的时间才从这里找到(请阅读一下,它写得非常好):https://agilesysadmin.net/how-to-manage-long-lines-in-vim/


1
应该是 set number 而不是 set numbers,对吗? - Benjamin W.
1
它还出现了两次 ;) - Benjamin W.
什么?伙计,你会认为经过这么多年我会更加观察周到 - 再次感谢~ - Acryce

5

将窗口宽度缩小至约80个字符,使用set wrapset linebreak命令可以满足您的所有需求。

请参阅:help 'wrap':help 'linebreak'


1
谢谢,这个有效。我会接受你的答案,但是你能否更新一下你的回复,改成这样::set columns 120 :set wrap :set linebreak。这样对于那些想要快速尝试这个功能以确保它是否正确的人来说会更容易。 - antimatter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接