如何在vim中停止换行


257

我喜欢长行显示在多个终端行上;我不喜欢vim在我的实际文本中插入换行符。我应该更改.vimrc的哪一部分?


7
为了清楚起见:您喜欢将长行显示在多个终端行上。您不喜欢vim在您的实际文本中插入换行符?如果是这样,那么:set nowrap是你想要什么:(相反。
安德鲁·艾利特

@Andrew:是你的总结是准确的我想要的东西
海原张

Answers:


304

:set wrap

为了视觉上换行,即该行仍然是一行文本,但是Vim将其显示在多行上。

:set nowrap

将长行显示为仅一行(即,您必须水平滚动才能看到整行)。


3
谢谢你们的提示。我选择了:set nowrap和:set textwidth = 0效果很好
罗伯特·贝尔特兰

5
当我键入时,我仍然希望看到“可视”的80列限制,并且我不希望vim在第80列之后键入时自动添加换行符。我该怎么办?
奥利维尔·庞斯

7
这正是我一直在寻找的答案,但不是OP的问题的答案。将此作为最佳答案有点误导。我不知道如何解决这种情况。我只需要编辑您的答案即可回答原始问题。但是已经有一个正确的答案,几乎得到了同样的高度评价。所以我刚刚投票决定切换两个答案。
Daniel Darabos

3
这正是我的回答没有找,这是没有答案的OP的问题。
peeol

这不是问题的答案。

194

我喜欢长行显示在多个终端行上

这种视觉/虚拟换行是通过wrapwindow选项启用的:

set wrap

我不喜欢vim在我的实际文本中插入换行符。

要关闭物理换行,请同时清除textwidthwrapmargin缓冲区选项:

set textwidth=0 wrapmargin=0

1
谢谢!set textwidth=0 wrapmargin=0可以,但是如果我放进去.vimrc,它对纯文本文件没有任何作用。如何找出并消除覆盖?
qubodup

7
@qubodup您可以通过打开出现问题的文件并输入来测试是否覆盖了.vimrc设置:verbose set textwidth? wrapmargin?。这将告诉您它们的当前值以及它们的设置位置。您可能有一个覆盖它们的插件。在这种情况下,您可以卸载该插件,或者稍后尝试在运行时路径(例如:)中~/.vim/after或使用您自己的自动命令覆盖该插件设置。正确的方法取决于重置位置/方式。
劳伦斯·贡萨尔维斯

set wrapset linebreak正是这样做是为了我。
伊利亚·乔利

36

我不确定我是否完全理解,但是您可能正在寻找“ formatoptions”配置设置。尝试类似的东西:set formatoptions-=t。该t选项将插入换行符,以使文字以设置的宽度换行textwidth。您也可以在中添加此命令.vimrc,只需删除冒号(:)。


3
在我看来,这似乎是解决OP愿望的最佳选择。我喜欢vim仍在处显示垂直线这一事实tw
mitchus

3
这是实际解决OP问题的唯一答案。大多数其他人则相反。OP仍然希望将长行显示为环绕,但对于Vim而言,不要自动插入换行符。
sebastian

33

使用:set nowrap..就像魅​​力一样!


10
除了它与OP定义为想要的行为相反...:P
Morlock

5
@Morlock,但在这里回答了我和Google所带领的问题:)
Ben Usman

有键盘快捷方式吗?
Pini Cheyni '17

@PiniCheyni,添加到您的.vimrc文件中:nnoremap <Cw>:set invwrap <CR>然后您可以使用Ctrl + W切换文本换行。
reas0n

30

:set tw=0

VIM不会自动插入换行符,但会保持换行。


3
我想完全相反...当我键入时,我仍然希望看到“ visual” 80列限制,并且我不希望vim在第80列之后键入时自动添加换行符。我该怎么办?
奥利维尔·庞斯

16

您可能会发现set lbr有用;加上set wrap此位将换行,但仅在空白处切线,而不是在单词中间。

例如

without lbr the li
ne can be split on
a word

with lbr on the
line will be
split on 
whitespace only

据highlly建议避免缩写的选择,因为在未来,你将不得不作出的帮助系统上进行搜索,了解你已经解决了什么,所以使用set nolinebreak的,而不是set lbr
SergioAraujo


4

奇怪的是,如此简单的设置需要这么多的“轨迹”才能发挥作用。

现在要回答您的问题,对我而言,它似乎可以与以下各项结合使用:

:set wrap linebreak nolist

(这似乎可以防止现有的行中断,只需换行即可。)

set formatoptions=l

(这可以防止新行/已编辑行的中断,而+ =并不适合我,因为其他设置/插件似乎在寻找空间并添加了自己的覆盖我的选项。)


4

如果像我一样在Windows上运行gVim,则您的.vimrc文件可能正在寻找另一个“示例” Vimscript文件,该文件会自动为文本文件设置textwidth(在我的情况下为78)。

对类似问题的答案如何在Vi和Vim Stack Exchange网站停止在第80列中gVim包装文本

就我而言,Vitor的评论建议我运行以下命令:

:verbose set tw?

这样做给了我以下输出:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

vimrc_example.vim中,找到了相关行:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

我发现我的.vimrc正在采购该文件:

source $VIMRUNTIME/vimrc_example.vim

就我而言,我不想textwidth为任何文件设置,因此我只是在vimrc_example.vim中注释掉了相关行。


1
我没有编辑vimrc_example.vim文件,而是将其添加autocmd FileType text setlocal textwidth=0到vimrc文件中,该文件解决了其他提议的解决方案没有解决的问题。
GrandAdmiral

3

正确的是,设置nowrap可以使您粘贴较长的行而无需vi / vim添加换行符,但是为了方便阅读,该行没有进行视觉包装。相反,您只需滚动一长行。

要以视觉方式换行,但不插入换行符,请设置换行(可能是默认设置,因此不需要设置)并设置textwidth = 0

在某些系统上,textwidth = 0的设置是默认设置。如果找不到这种情况,请将set textwidth = 0添加到您的.exrc文件中,以使其成为所有vi / vim会话的用户默认值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.