Vim中的Word Wrap(保留缩进)

我只是看着这个post ,描述了如何在vim中包装整个单词。 接受的解决scheme是这样的:

:set formatoptions=l :set lbr 

其中需要这个文本(标签显示为\ t):

  *Inside of window *Outside of window |---------------------------------------| |\t\tthis is a like of text that will wr|ap here |\t\tcan you see the wrap | | | |---------------------------------------| 

这实现了这样的行为(标签显示为\ t):

  *Inside of window *Outside of window |---------------------------------------| |\t\tthis is a like of text that will | |wrap here | |\t\tcan you see the wrap | | | |---------------------------------------| 

不过我想重新定义这个函数。 我希望包装线在前面有相同数量的选项卡,以上行加1。 即:

  *Inside of window *Outside of window |---------------------------------------| |\t\tthis is a like of text that will | |\t\t\twrap here | |\t\tcan you see the wrap | | | |---------------------------------------| 

有任何想法吗?

破坏补丁有你在找什么。 我成功地应用它使用在这个线程中发现的指令:

使用Homebrew在OS X上修补Vim

具体来说,echristopherson的Homebrew公式。

我知道这个线程是旧的,但它在谷歌stream行,我试图find一个解决scheme多次遇到它。

编辑:这个补丁现在包含在vim中作为补丁7.4.338。 请参阅: https : //retracile.net/blog/2014/07/18/18.00

在优胜美地(Mac OS X)上,我使用了Hombrew的snowbound命令:

 brew install macvim --with-features=huge --override-system-vim --HEAD 

这个问题最初被问到时不起作用,但截至2014年6月25日,这将起作用。 (假设你将vim更新为比该date更新的版本)

添加到您的.vimrc:

 set breakindent 

而就是这样!

有些人(包括我自己)在多台计算机上共享一个.vimrc文件。 在这种情况下,这条线是健壮的(避免恼人的错误消息)是重要的。 这个好一点:

 if has("patch-7.4.354") set breakindent endif 

这样,如果你使用的是早期版本的vim,你不会收到错误信息。

你将得到最好的是showbreak选项,将固定的string前面的每个包装行(我使用set showbreak=... )。

我同意“showbreak”是最好的select。 Showbreak通常不允许您将非打印字符(例如空格或制表符)放入showbreakstring中,因此通常会使用沿左边缘给出的指示符,即没有真正的缩进。 这不是很好,因为我认为OP的主要目标是让包装线缩进,使它们摆脱左边缘区域,看起来像自己的线条。

因此,使用showbreak添加(丑陋)缩进的一种方法是只使用很多字符,例如“:set showbreak => —————>”。 这导致了这样的结果:

  *Inside of window *Outside of window |---------------------------------------| |\t\tthis is a like of text that will | |>--------------->wrap here | |\t\tcan you see the wrap | | | |---------------------------------------| 

一个更好的select是使用不间断的空格字符(假设你的Vim实例是启用了unicode的),每一个都可以使用ctrl-v的键序列160input到showbreakstring中。 这样你就可以在左边input一个空白的显示string,并且看起来是一个真正的缩进。 例如,“:set showbreak = ………… >>”,其中每个“。” 在命令中实际上是一个不间断的空格字符,通过按ctrl-V,160进入。 这样,你最终会有一个很好的缩进,就像这样:

  *Inside of window *Outside of window |---------------------------------------| |\t\tthis is a like of text that will | | >>wrap here | |\t\tcan you see the wrap | | | |---------------------------------------| 

你仍然没有能力根据上一行的缩进来改变缩进级别,但是至less你可以得到干净的缩进线,而不会在窗口的左边缘造成大量的视觉混乱。 如果包装线的缩进小于实际线的起始位置,则可能仍然存在混淆,但是可以通过使showbreak“缩进”非常大(即,大于代码中常见的任何缩进),但仍然足够小,它提供足够的空间来清晰地包装文本。 对于许多用途,我认为40或50个空格的缩进缩进可以很好地实现。