是否可以在Vim中显示缩进指南?

时间:2010-01-28 22:02:04

标签: vim plugins indentation highlighting

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

:set list 

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

有谁知道如何实现这一目标?

7 个答案:

答案 0 :(得分:66)

注意:这个答案有点晚了,也是一个无耻的插件:))

无论如何,请尝试我的Indent-Guides.vim插件。它的创建是为了抓住我自己的痒,因为vim中缺少缩进指南。我厌倦了等待别人过来建造它,所以我自己就做了。

特点:

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

以下是该插件的一些屏幕截图:put your mouse here and click

答案 1 :(得分:27)

您可以使用标签显示缩进指南并在保存文件之前删除标签:

" 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

答案 2 :(得分:27)

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

答案 3 :(得分:15)

这将在您键入时显示指示缩进级别的点。当你离开这条线时,这些圆点会神奇地消失。

set list listchars=tab:»-,trail:·,extends:»,precedes:«

E.g:

def test():
....print('indentation level 1')

非常酷吧?

答案 4 :(得分:15)

最有效的解决方案可能是“绘制”缩进指南 使用匹配突出显示。要了解它有何帮助,请看这个例子:

: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()。当然,您可以更改突出显示组 (或创建一个特殊的仅用于缩进指南),设置方便 为此映射 1 和/或从autocmd为某个文件调用它 类型。


1 缩进指南突出显示我.vimrc的配置 档案:https://gist.github.com/734422

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

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