Vim中的单词换行(保留缩进)

时间:2010-05-13 15:45:41

标签: vim word-wrap

我只是看this post,它描述了如何在vim中包装整个单词。接受的解决方案是:

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

但我想重新定义这个功能。我希望被包裹的行在它前面有相同数量的标签,上面的行加一。即:

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

有什么想法吗?

4 个答案:

答案 0 :(得分:23)

当问题最初被问到时,这不起作用,但截至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 :(得分:18)

breakindent patch有你想要的东西。我使用此主题中的说明成功应用了它:

Patch Vim with the breakindent patch on OS X with Homebrew

具体来说,是echristopherson的Homebrew公式。<​​/ p>

我知道这个帖子已经过时了,但它在Google上很受欢迎,而且在尝试寻找解决方案时,我多次遇到它。

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

在Yosemite(Mac OS X)上,我使用了hombrew的snowbound命令:

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

答案 2 :(得分:8)

你要获得的最好的是showbreak选项,它会在每个包裹的行前放置一个固定的字符串(我使用set showbreak=...)。

答案 3 :(得分:4)

我同意答案,说'showbreak'是最好的选择。 Showbreak通常不允许您将非打印字符(例如,空格或制表符)放入showbreak字符串中,因此通常使用它只会在左边距处给出一个指示符,即没有真正的缩进。这不是很好,因为OP的主要目标是给包裹的线条缩进,使它们不会弄乱左边缘区域,看起来像是自己的线条。

因此,使用showbreak添加(丑陋)缩进的一种方法是使用大量字符,.eg,“:set showbreak =&gt; ---------------&gt ;”。这会产生如下情况:

 *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 = ... ... ...&gt;&gt;”每个'。'在命令中实际上是按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               |
|                                       |
|---------------------------------------|

你仍然没有能力根据前一行的缩进来改变缩进级别,但至少你得到包裹行的干净缩进,而窗口的左边缘没有大量的视觉混乱。如果换行的缩进小于实际行的开头,则仍然可能会出现混淆,但这可能通过使showbreak“缩进”非常大(即,大于代码中常见的缩进)来避免这种情况。 )但仍然足够小,它提供了足够的空间,可以清晰地包装文本。对于许多用途,我认为40或50个空格的展示缩进会很好地做到这一点。