Вероятно, наиболее эффективным решением было бы "нарисовать" направляющие для отступов
используя подсветку спичек. Чтобы понять, как это помогает, посмотрите на этот пример:
:match Search /\%(\_^\s*\)\@<=\%(\%1v\|\%5v\|\%9v\)\s/
Подсвечивается (используя группу Подсветка поиска, можно использовать любой
другое, конечно) первое, пятое, девятое (и это можно продолжить)
виртуальный столбец, занятый символом пробела, предшествующим только пробелам из
начало строки. Таким образом, это производит выделение отступа в четыре пространства
для трех глубоких уровней.
Чтобы обобщить эту идею, осталось только сгенерировать такую модель
упомянутый выше согласно текущему буферу textwidth
и shiftwidth
(для обработки более глубоких уровней отступа и правильной ширины отступа). Эта задача может быть
просто автоматизировано, как показано в функции ниже.
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