如何让vim显示折行但不插入新行?

16

由于 Macbook 主板出现故障(我的备用 Linux 电脑无法运行 TextMate),我重新接触了内心的 (g)vim。总体而言,我对 vim 的效率和功能感到满意,但是我对获取类似于甚至简单 HTML 文本区域所实现的换行方式感到惊恐。

考虑以下文本

Etiam ornare mollis tortor. Suspendisse sed neque. Nullam in elit. Cum sociis nullam.

默认情况下,使用 80 个字符的宽度,vim 显示为

Etiam ornare mollis tortor. Suspendisse sed neque. Nullam in elit. Cum sociis nu
llam.

这种换行不关心空白,因此有时只是将单词切成几部分(在此案例中为 "nullam")。当然,您可以打开单词换行功能,得到如下结果:

Etiam ornare mollis tortor. Suspendisse sed neque. Nullam in elit. Cum sociis
nullam.

问题在于,vim 在换行处插入了一个 换行符,而我绝对不想要它。换句话说,我希望文本的显示方式与 vim 打开单词换行的效果完全相同,但是不插入换行符(这样它可以粘贴到 HTML 文本区域和电子邮件程序等位置中)。

尽管我已经努力搜索了很多,但网络搜索没有给出有用的结果。我希望 StackOverflow 能在谷歌搜索失败的地方成功。


我不确定这是否可能,因为vim必须以某种方式对齐...即使它自己没有放置换行符,您的控制台应用程序很可能会。Gvim也许可以...我不知道。如果您使用vim的图形模式,可能是可能的,但我不确定。 - Matthew Scharley
3个回答

19

要打开自动换行:

:set wrap
:set linebreak

要在gvim中复制和粘贴原始文本而不是任何填充,可以正常运作。 然而,在xterm中使用vim时,它会复制EOL处的空格填充(但不包括换行符)。 我认为这应该可行,但事实并非如此:

:set mouse=a

10

我发现 这个 很有帮助 - 像魔法一样好用。

基本上,我只是在我的vimrc文件中添加了这些行:

" not to break on words
set formatoptions=1
set linebreak

" fixing up moving line by line in the paragraph
nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk

3
如果vim添加了换行符(不仅是文本换行),那么您可能已经打开了textwidth ...
:set textwidth=0

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