停止 Vim 在单词中间换行

71

在执行:set wrap命令后,Vim会将超过窗口长度的行进行换行。

但是,是否有可能让Vim只在空格处进行换行,而不是在单词中间进行换行呢?


2
http://vimcasts.org/episodes/soft-wrapping-text/ - sidyll
5个回答

88

:help wrap

此选项更改文本的显示方式,而不会更改缓冲区中的文本,请参见 'textwidth'。 打开此选项时,超过窗口宽度的行将自动换行并在下一行继续显示。关闭此选项时,长行不会自动换行,只会显示部分内容。当光标移动到未显示的部分时,屏幕将水平滚动。 行将在单词中间断开,如果需要,可以查看 'linebreak' 以获取单词边界处的折行。

:help linebreak

打开此选项后,Vim 将在 'breakat' 中定义的字符处折断长行,而不是在适合屏幕的最后一个字符处折断。

:help breakat

'breakat' 'brk' string(默认值为 " ^I!@*-+;:,./?"

因此,使用命令 :set linebreak 即可启用该功能。或者,您可以通过限制 breakat 仅在空格上进行折行来使用,而非包括空格和标点符号。


漂亮的回答! - PiersyP

23
使用
:set linebreak

'lbr'(缩写)。 它将在包含在您的'breakat'选项中的字符上断行,默认情况下包括空格。


4
使用vim打开后,按下esc键并输入:set lbr

2
以下代码可实现在不断开单词的情况下换行,并保留较短的行。
:set formatoptions+=w
:set tw=80
gggqG

要尝试格式化当前段落,请尝试以下操作:

:nnoremap Q gqip

1
以下命令对我有用,我在工作中使用Red Hat 7.x,在家中使用Cygwin 3.1.4。感叹号的作用类似于非运算符。
:set wrap
:set wrap!

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