Vim中的换行字(保留缩进)

Vim中的换行字(保留缩进),vim,word-wrap,Vim,Word Wrap,我只是在看哪个描述了如何用vim包装整个单词。公认的解决办法是: :set formatoptions=l :set lbr 其中包含此文本(选项卡显示为\t): 这将实现如下行为(选项卡显示为\t): 然而,我想重新定义这个函数。我想包装线有相同数量的标签在它前面的行上面有加一。即: *Inside of window *Outside of window |---------------------------------------|

我只是在看哪个描述了如何用vim包装整个单词。公认的解决办法是:

:set formatoptions=l
:set lbr
其中包含此文本(选项卡显示为\t):

这将实现如下行为(选项卡显示为\t):

然而,我想重新定义这个函数。我想包装线有相同数量的标签在它前面的行上面有加一。即:

 *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               |
|                                       |
|---------------------------------------|

有什么想法吗?

你能得到的最好的答案是
showbreak
选项,它会在每一行前面放一个固定的字符串(我使用
set showbreak=…
)。

我同意答案,showbreak是最好的选项。Showbreak通常不允许您将非打印字符(例如空格或制表符)放入Showbreak字符串中,因此通常使用时,它只会沿左边距提供一个指示符,即没有实际缩进。这并不是很好,因为我认为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               |
|                                       |
|---------------------------------------|
 *Inside of window                        *Outside of window
|---------------------------------------|    
|\t\tthis is a like of text that will   |
|            >>wrap here                |
|\t\tcan you see the wrap               |
|                                       |
|---------------------------------------|
更好的替代方法可能是使用不间断空格字符(假设您的Vim实例启用了unicode),每个字符都可以使用ctrl-v,160的键序列输入showbreak字符串。这样,您就可以输入一个showbreak字符串,该字符串左侧为空,看起来是一个真正的缩进。例如,“: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               |
|                                       |
|---------------------------------------|
 *Inside of window                        *Outside of window
|---------------------------------------|    
|\t\tthis is a like of text that will   |
|            >>wrap here                |
|\t\tcan you see the wrap               |
|                                       |
|---------------------------------------|
您仍然没有任何能力根据前一行的缩进来改变缩进的级别,但至少您可以获得清晰的已包装行缩进,而不会在窗口的左边缘出现大量视觉混乱。如果包装行的缩进小于实际行开头的缩进,仍然可能会产生混淆,但是可以通过使showbreak“缩进”相当大(即,大于代码中常见的任何缩进)但仍然足够小,从而为文本的清晰包装提供足够的空间来避免这种混淆。对于许多用途,我认为40或50个空格的showbreak缩进可以很好地实现这一点。

具有您想要的功能。我使用此线程中的说明成功应用了它:

特别是埃奇里斯托弗森的自制配方

我知道这个帖子很老了,但在谷歌上很流行,我在寻找解决方案时多次遇到它

编辑:该补丁现在作为补丁7.4.338包含在vim中。见:

在Yosemite(Mac OS X)上,我将snowbound的命令与hombrew一起使用:

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

最初提出该问题时,该方法不起作用,但截至2014年6月25日,该方法将起作用。(假设您将vim更新为比该日期更新的版本)

添加到您的.vimrc:

" Indents word-wrapped lines as much as the 'parent' line
set breakindent
" Ensures word-wrap does not split words
set formatoptions=l
set lbr
就这样

--

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

if has("patch-7.4.354")
    " Indents word-wrapped lines as much as the 'parent' line
    set breakindent
    " Ensures word-wrap does not split words
    set formatoptions=l
    set lbr
endif

这样,如果您使用的是早期版本的vim,则不会收到错误消息

为使问题尽可能清晰所做的努力+1。您希望文本在窗口边缘软包装,还是在线条达到一定长度时硬包装?我认为您需要硬包装(在文本中“will”之后插入换行符),但从您的示例中很难判断。@Bill,我主要对软包装感兴趣,但硬包装解决方案也是可以接受的。您需要的功能目前尚未内置到Vim中。然而,有一个补丁非常接近:(它是#15,“正确缩进包装行”)。相关:Vimcast在使用外部unix实用程序处理此问题方面有一个很好的插曲:您可以通过转义将空格放入showbreak:
:set showbreak=\\\\\\
。然而,仍然不适用于制表符。@AlexanderBird根据,不,你不能–
showbreak
只是一个字符串。有趣的是,这适用于我的cygwin的7.4 vim,但不适用于我的unbuntu的7.4 vim。我猜它需要更广泛一点,但很快就会被普遍采用。在Vim 7.4@ArchLinux中工作。您可以使用此测试:
if has(“patch-7.4.354”)
这并没有回答关于OP评论的问题:相同数量的选项卡(…)加上一个。顺便说一句,在我看来这也是非常重要的,您可能经常希望保留额外的缩进,并以光学方式将包装的片段向右移动(紧密排列的列表、注释等);该修补程序似乎与最新的自制macvim不兼容@Exit42您是如何使其工作的?nvm。我用自制的Bleed edge编译了macvim
brew安装macvim——功能=巨大——覆盖系统vim——HEAD
见下面我的答案:在较新版本的vim中不需要补丁。