Подтвердить что ты не робот

Можно ли отображать направляющие отступов в Vim?

Я давний пользователь Vim (3 или 4 года), который недавно начал работать с некоторым глубоко вложенным кодом. Этот код имеет отступы с пробелами, а не с вкладками. Я бы хотел, чтобы какой-то чистый и не отвлекающий признак отступа, чтобы помочь отслеживать, какой блок кода я нахожу, когда я смотрю на что-то много на глубину.

:set list 

Отображает только символы вкладки и конечной линии. Я нашел один плагин (на данный момент он, похоже, не может его выкопать), который будет выделять каждый уровень отступа в постепенно более темных цветах, но это визуально непривлекательно. В идеале я хотел бы видеть тонкие вертикальные линии на каждом уровне отступов. Многие новомодные редакторы имеют эту функциональность, но я пока не готов отказаться от Vim.

Кто-нибудь знает, как это можно достичь?

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ. Этот ответ немного опоздал на вечеринку, а также бесстыдный плагин:)

Независимо от того, попробуйте плагин Indent-Guides.vim. Он был создан, чтобы поцарапать мой собственный зуд в связи с отсутствием направляющих отступов в vim. Я устал ждать, пока кто-нибудь еще придет и построит его, поэтому я просто сделал это сам.

Особенности:

  • Может обнаруживать стили отступов табуляции и пробела.
  • Автоматически проверяет вашу цветовую схему и выбирает соответствующие цвета (только gVim).
  • Выделите уровни отступа с чередующимися цветами.
  • Полная поддержка gVim и базовая поддержка для Terminal Vim.
  • Кажется, что работает на Windows gVim 7.3 (хотя никаких обширных тестов еще не было).
  • Настраиваемый размер для направляющих отступа, например. тощие направляющие (только для мягких вкладок).
  • Настраиваемый начальный уровень отступа.

Вот несколько скриншотов плагина в действии: наведите указатель мыши и нажмите.

Ответ 2

вы можете использовать вкладки для отображения руководств по отстукам и удаления вкладок перед сохранением файла:

" 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

Ответ 3

Если вы вдавили код с пробелами, вы можете попробовать плагин my: https://github.com/Yggdroot/indentLine, он отображает тонкую вертикальную но не толстые вертикальные линии, как упоминается выше. Если вы заключили код с вкладкой, просто :set list lcs=tab:\|\ (here is a space)

Ответ 4

Здесь будут показаны точки, указывающие ваш уровень отступов по мере ввода. Точки волшебным образом исчезают, когда вы покидаете линию.

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

например:

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

Довольно круто, да?

Ответ 5

Вероятно, наиболее эффективным решением было бы "рисовать" направляющие отступов используя подсветку соответствия. Чтобы понять, как это помогает, посмотрите на этот пример:

: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

Ответ 6

Попробуйте этот плагин VIM BlockHL Он цвет кодирует отступ каждого последующего уровня по-разному.

РЕДАКТИРОВАТЬ: Что вы используете lanaguge? Этот плагин предназначен для языков C-стиля.

Ответ 7

используйте плагин Indent-Guides.vim и переключите использование ig всякий раз, когда вам это нужно. Иногда это может раздражать:)