Is it possible to display indentation guides in Vim?

后端 未结 7 1153
暖寄归人
暖寄归人 2020-11-30 18:50

I\'m a longtime Vim user (3 or 4 years) who has recently started dealing with some deeply nested code. This code is indented with spaces, not tabs. I would like some clean

相关标签:
7条回答
  • 2020-11-30 19:21

    Probably the most effective solution would be to “draw” indentation guides using match-highlighting. To understand how it may be useful, take a look at the following example:

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

    It highlights—using the Search highlighting group; any other group can, of course, be used—the first, the fifth, and the ninth (it can be continued) virtual columns occupied by the space character preceding nothing but whitespace from the beginning of line. Hence, this produces highlighting for four-space indentation that is at most three levels deep.

    The only thing remaining to generalize this idea is a procedure generating a pattern similar to the one above, according to the current buffer’s textwidth and shiftwidth settings, in order to handle deeper indent levels and use the actual indentation width. This task can be simply automated as shown in the function below.

    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
    

    Whenever indentation guides are necessary in the current buffer, it can be switched on via :call ToggleIndentGuides(). Of course, one can change the highlighting group (or even create a dedicated one for using with indentation guides), setup a handy mapping for that, and call it from an autocmd for some file types.

    For an example, see the indentation guides highlighting configuration from my .vimrc file at https://gist.github.com/734422.

    0 讨论(0)
提交回复
热议问题