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

我是一个长期的Vim用户(3或4年),他最近开始处理一些深度嵌套的代码。 这段代码是用空格缩进的,而不是制表符。 我想要一些干净而不干扰的缩进指示,以帮助跟踪我正在查看多层次深度的代码块。

:set list 

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

有谁知道这是如何实现的?

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

无论如何,试试我的Indent-Guides.vim插件。 它被创build,以抓挠我自己的痒在vim缺乏缩进指南。 我厌倦了等待别人来build造它,所以我自己做了。

特征:

  • 可以检测制表符和空格缩进样式。
  • 自动检查您的颜色配方,并select合适的颜色(仅限gVim)。
  • 将突出显示交替颜色的缩进水平。
  • 完全支持gVim和Terminal Vim的基本支持。
  • 似乎在Windows gVim 7.3上工作(虽然还没有做过任何广泛的testing)。
  • 缩进指南的可自定义大小,例如。 精简指南(仅适用于软标签)。
  • 可自定义的开始缩进级别。

下面是插件的一些截图: 将鼠标放在这里,然后单击 。

您可以使用选项卡来显示缩进指南,并在保存文件之前删除选项卡:

 " 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 

如果你用空格缩进代码,你可以试试我的插件: https : //github.com/Yggdroot/indentLine ,它显示了细的垂直线,但不是像上面的回答中提到的那样粗的垂直线。 如果你用tab缩进代码,只需要:set list lcs=tab:\|\ (here is a space)

这将显示点,以指示您input时的缩进级别。 当你离开这条线时,这个点奇迹般地消失了。

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

例如:

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

很酷很好吧?

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

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

它突出显示(使用search高亮组,当然可以使用任何其他的)第一个,第五个,第九个(也可以是继续)虚拟列占用的空间符号只是前面的空白符号而不是行首。 所以这样就产生了深度三个层次的四空间缩进。

为了概括这个想法,根据当前缓冲区的textwidthshiftwidth (处理更深的缩进级别和合适的缩进宽度),只能生成上面提到的模式。 这个任务可以简单地自动化,如下面的function所示。

 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() 。 当然,你可以改变突出显示组(或者创build一个专门用于缩进指南的特殊组),为此设置一个方便的映射1和/或从autocmd为某些文件types调用它。


1缩进指南从我的.vimrc文件中突出显示configuration: https : //gist.github.com/734422

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

编辑:你使用什么lanaguge? 这个插件是C风格的语言。

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