50

我是一个长期的 V​​im 用户(3 或 4 年),最近开始处理一些深度嵌套的代码。此代码使用空格而不是制表符缩进。我想要一些清晰且不分散注意力的缩进指示,以帮助跟踪我在查看多个层次的内容时所在的代码块。

:set list 

只显示制表符和结束行字符。我找到了一个插件(目前似乎无法挖掘它),它会以逐渐变暗的颜色突出显示每个缩进级别,但这在视觉上并不吸引人。理想情况下,我希望在每个缩进级别看到细垂直线。许多新奇的编辑器都有这个功能,但我还不愿意放弃 Vim。

有谁知道如何做到这一点?

4

7 回答 7

72

这个答案对派对来说有点晚了,也是一个无耻的插件。:)

不管怎样,试试我的Indent-Guides.vim插件。它的创建是为了解决我对 vim 中缺少缩进指南的烦恼。我受够了等待其他人来建造它,所以我自己做了。

特征:

  • 可以检测制表符和空格缩进样式。
  • 自动检查你的配色方案并选择合适的颜色(仅限 gVim)。
  • 将使用交替颜色突出显示缩进级别。
  • 对 gVim 的完全支持和对终端 Vim 的基本支持。
  • 似乎可以在 Windows gVim 7.3 上工作(虽然没有进行任何广泛的测试)。
  • 缩进指南的可定制尺寸,例如。瘦指南(仅限软标签)。
  • 可定制的开始缩进级别。

以下是该插件的一些截图:将鼠标放在此处并单击

于 2011-02-11T10:58:21.213 回答
33

如果你用空格缩进代码,你可以试试我的插件:https://github.com/Yggdroot/indentLine,它显示细垂直线,但不显示上述答案提到的粗垂直线。如果您使用制表符缩进代码,只需:set list lcs=tab:\|\ (here is a space)

于 2012-12-06T05:02:55.180 回答
30

您可以使用制表符来显示缩进指南并在保存文件之前删除制表符:

" use 4 spaces for tabs
set tabstop=4 softtabstop=4 shiftwidth=4

" display indentation guides
set list listchars=tab:❘-,trail:·,extends:»,precedes:«,nbsp:×

" convert spaces to tabs when reading file
autocmd! bufreadpost * set noexpandtab | retab! 4

" convert tabs to spaces before writing file
autocmd! bufwritepre * set expandtab | retab! 4

" convert spaces to tabs after writing file (to show guides again)
autocmd! bufwritepost * set noexpandtab | retab! 4
于 2010-01-29T05:09:13.790 回答
17

以下命令将配置 Vim 以显示点以指示您键入时的缩进级别。当光标离开该行时,这些点会神奇地消失:

:set list listchars=tab:»-,trail:·,extends:»,precedes:«
于 2010-01-29T15:50:44.427 回答
16

可能最有效的解决方案是使用匹配突出显示“绘制”缩进指南。要了解它的用途,请查看以下示例:

:match Search /\%(\_^\s*\)\@<=\%(\%1v\|\%5v\|\%9v\)\s/

它突出显示——使用搜索突出显示组;当然,可以使用任何其他组 - 第一、第五和第九(可以继续)虚拟列被空格字符占据,该空格字符从行首开始只是空格。因此,这会为最多三层深度的四空间缩进产生突出显示。

唯一要推广这个想法的是一个过程,根据当前缓冲区textwidthshiftwidth设置生成类似于上述模式的模式,以便处理更深的缩进级别并使用实际的缩进宽度。该任务可以简单地自动化,如下面的函数所示。

function! ToggleIndentGuides()
    if exists('b:indent_guides')
        call matchdelete(b:indent_guides)
        unlet b:indent_guides
    else
        let pos = range(1, &l:textwidth, &l:shiftwidth)
        call map(pos, '"\\%" . v:val . "v"')
        let pat = '\%(\_^\s*\)\@<=\%(' . join(pos, '\|') . '\)\s'
        let b:indent_guides = matchadd('CursorLine', pat)
    endif
endfunction

每当当前缓冲区中需要缩进指南时,可以通过:call ToggleIndentGuides(). 当然,您可以更改突出显示组(甚至创建一个专用于缩进指南的组),为此设置一个方便的映射,并从autocmd某些文件类型中调用它。

例如,请参阅我在https://gist.github.com/734422.vimrc的文件中突出显示配置的缩进指南,它实现了上述方法的略微扩展版本。

于 2010-01-30T05:31:26.343 回答
1

试试这个 VIM 插件BlockHL 它对每个连续级别的缩进进行不同的颜色编码。

编辑:你用什么语言?该插件适用于 C 风格的语言。

于 2010-01-28T22:06:38.763 回答
0

使用 Indent-Guides.vim 插件,并在需要时切换使用 ig。有时它可能很烦人:)

于 2015-06-16T05:14:37.093 回答