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

mjn*_*n12 45 vim plugins highlighting indentation

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

:set list 
Run Code Online (Sandbox Code Playgroud)

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

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

Nat*_*e K 67

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

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

特征:

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

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

  • 我不得不在我的.vimrc中添加`let g:indent_guides_enable_on_vim_startup = 1`来启用它.(我无法加载帮助文件,但添加此行后插件工作正常. (9认同)
  • 有没有人让这个在非基于Windows的机器上工作?无论是否通过病原体,无论是vim还是gvim,我都无法加载它.甚至没有加载帮助文件 (3认同)
  • "把你的鼠标放在这里然后点击"......那就是我的一天.+1具有幽默感. (2认同)

Nik*_*sev 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
Run Code Online (Sandbox Code Playgroud)


小智 27

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

  • @ThiefMaster谁在乎他是否没有透露这是他的项目?这是一个有效的答案.有可能有缩进的quides(使用*他的*插件),但它是免费的和开源....所以谁在乎他是否不透露它是他的?他提供了一个解决方案 (7认同)
  • 您需要披露这是您的项目.你的最后一个答案只是一个链接,因此很无用. (6认同)
  • @ThiefMaster如果他只是将他的代码*贴在答案中,你会更喜欢它吗? (4认同)
  • @trusktr:因为Stack Overflow社区的大多数人对未公开的自我推销和仅包含链接的答案感到皱眉!如果您对此有疑问,请在[meta]上发帖. (4认同)
  • 我对上面的讨论晚了几年,但为了记录,未公开的隶属关系[可以被视为垃圾邮件](https://stackoverflow.com/help/promotion)。是的,为免费和开源项目做广告仍然可能是垃圾邮件——免费和开源并不会自动使其不是垃圾邮件,所以是的,披露从属关系确实很重要。明确地说,我并不是说这个答案现在是一个问题 (3认同)

Pie*_*tte 15

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

set list listchars=tab:»-,trail:·,extends:»,precedes:«
Run Code Online (Sandbox Code Playgroud)

例如:

def test():
....print('indentation level 1')
Run Code Online (Sandbox Code Playgroud)

很酷吧?


ib.*_*ib. 15

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

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

它突出显示(使用搜索突出显示组,当然可以使用任何其他组合)第一个,第五个,第九个(并且可以继续)虚拟列占用空格符号,但不包括从行首开始的空格.因此,这会产生四个空间的缩进,突出显示三个级别的深度.

为了概括这个想法,它仍然只是根据当前缓冲区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
Run Code Online (Sandbox Code Playgroud)

每次在缓冲区中需要缩进指南时,都可以打开它 :call ToggleIndentGuides().当然,您可以更改突出显示组(或创建一个仅用于缩进指南的特殊组),为此设置一个方便的映射1和/或autocmd为某些文件类型调用它.


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


pre*_*ion 1

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

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