vim 换行缩进

ret*_*ile 23 vim gvim

Vim/gvim 将像这样包装长行:

000000000000000000000000000000000000|
00000000000000                      |
    11111111111111111111111111111111|
111111111111111111                  |
    22222222222222222222222222222222|
222222222222222222                  |
        3333333333333333333333333333|
3333333333333333333333              |
Run Code Online (Sandbox Code Playgroud)

有没有办法让 Vim 显示这些像这样包裹的行?:

000000000000000000000000000000000000|
 00000000000000                     |
    11111111111111111111111111111111|
     111111111111111111             |
    22222222222222222222222222222222|
     222222222222222222             |
        3333333333333333333333333333|
         3333333333333333333333     |
Run Code Online (Sandbox Code Playgroud)

我希望包裹的行开始稍微超过该行开始位置的缩进。(为了清楚起见,我说的是换行,即软换行符,而不是 textwidth。)

我希望在该行的换行中考虑该行的缩进,以便代码结构不会被换行隐藏。

ret*_*ile 19

更新:此功能在 vim 7.4.338 中出现,但您需要 7.4.354 或更高版本


所以显然这需要一个 Vim 补丁Vaclav Smilauer早在 2007 年就有一个补丁。我更新了该补丁以与来自 Fedora 11 的 Vim 7.2.148 一起使用。但它似乎确实可以完成这项工作。

  • ...和 ​​[this answer](https://superuser.com/a/1211955/203848) 描述了如何使用这个新的(自 vim 7.4.338 起)功能来实现 OP 的要求。 (2认同)

Chr*_*sen 14

在您的 .vimrc 中:

set wrap               " soft-wrap lines

" requires +linebreak compile-time option (not in the 'tiny' and 'small' builds); check your :version
set showbreak=----->   " prefix for soft-wrapped lines (no actual line break character)
"set linebreak          " soft-wrap lines only at certain characters (see :help breakat)

" If you like line numbers, you may want this instead:
"set number
"set showbreak=------>\  " line up soft-wrap prefix with the line numbers
"set cpoptions+=n        " start soft-wrap lines (and any prefix) in the line-number area
Run Code Online (Sandbox Code Playgroud)

或者只需输入:set showbreak=----->任何会话。

作为参考,我的研究轨迹(Vim 6.2)::help 'wrap'-> :help 'linebreak'-> ( :help 'showbreak'-> :help 'cpoptions', :help 'breakat')


atu*_*ano 7

您的问题的解决方案可以通过在您的vimrc: 中设置两个参数来实现:

用相同的缩进换行: set breakindent

还有一个用于缩进软包装线的空间: let &showbreak=' '

它将以这种方式工作:

111111111111111|
 11111111111111|
 11111         |
222222222222222|
 222222222222  |
333333333333333|
 33333         |
Run Code Online (Sandbox Code Playgroud)

  • 现在 `vim` 支持 `breakindent`,这将是正确的答案。 (2认同)