我只是看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 |
| |
|---------------------------------------|
有什么想法吗?
答案 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个空格的展示缩进会很好地做到这一点。