Я только что провел несколько часов, работая над болью в отступах с помощью javascript, и пришел к выводу, что не удаляйте filetype indent on
из вашего vimrc!
Этот параметр обеспечивает наилучшие интеллектуальные отступы для файлов нескольких типов. Если вы получаете плохие результаты, вероятно, есть проблема с настройкой.
Настройки отступа для файла
Так что, если вы похожи на меня, вы, вероятно, имели filetype indent on
в вашем vimrc и не знали, что он делает.
Все, что делает этот параметр, - говорят vim искать файлы с правилами отступа, специфичными для типа файла. Есть несколько мест, где он выглядит, но, вероятно, вас заинтересуют только два.
$VIMRUNTIME/indent/
~/.vimrc/after/indent/
Первое место содержит правила отступа по умолчанию, которые поставляются с vim. Если бы вы установили filetype indent on
для новой установки vim, это то, откуда все интеллектуальные отступы. Например, когда вы откроете файл с именем index.html
in, вы получите правила из $VIMRUNTIME/indent/html.vim
.
По моему опыту, эти стандартные правила чертовски хороши, но они могут быть испорчены другими настройками.
Второе место (каталог after
) позволяет вам добавлять настройки, которые будут заменять те, которые находятся на первом месте. Это хорошо, потому что вам не нужно редактировать файлы по умолчанию для их настройки.
Ароматы вдавливания
Есть несколько вариантов отступов, как вы видели, и они не все хорошо играют вместе. Из Vim wiki:
автоотступ
'autoindent' делает не что иное, как копирование отступа из предыдущей строки при запуске новой строки. Это может быть полезно для структурированных текстовых файлов или когда вы хотите контролировать большую часть отступов вручную, без вмешательства Vim. 'autoindent' не мешает другим настройкам отступов, а некоторые сценарии отступов на основе типов файлов даже включают его автоматически.
Я использую filetype indent on
и set autoindent
в моем vimrc, так как они хорошо работают вместе. У меня нет других установленных.
smartindent & cindent
'smartindent' автоматически вставляет один дополнительный уровень отступа в некоторых случаях и работает для C-подобных файлов. «cindent» более настраиваемый, но и более строгий, когда дело доходит до синтаксиса.
'smartindent' и 'cindent' могут мешать отступам на основе типа файла и никогда не должны использоваться вместе с ними.
Когда дело доходит до C и C ++, отступы на основе типов файлов автоматически устанавливают 'cindent', и по этой причине нет необходимости устанавливать 'cindent' вручную для таких файлов. В этих случаях параметры «cinwords», «cinkeys» и «cinoptions» по-прежнему применяются.
Обычно 'smartindent' или 'cindent' следует устанавливать только вручную, если вы не удовлетворены тем, как работает отступ на основе типа файла.
indentexpr
Запускает сценарии отступа типа файла, найденные в (vimfolder)\indent\\(indentscripts)
. Это упомянуто в vim документации для типа файла, наряду с другими только что упомянутыми (также, это было причиной проблемы, которую я имел):
Сброс 'autoindent', 'cindent', 'smartindent' и / или 'indentexpr', чтобы отключить отступ в открытом файле.
Устранение неполадок
Есть вероятность, что какой-то мошеннический плагин изменяет настройки отступа, и поэтому вы получаете плохие результаты. К счастью verbose
скажет вам, какой файл был последним, кто изменил данный параметр.
:verbose set autoindent?
:verbose set cindent?
:verbose set smartindent?
:verbose set indentexpr?
Вы можете получить такой результат, как
indentexpr=SomeMessedUpValue
Last set from ~/.vim/bundle/some_plugin/indent/plaintex.vim
Если это произойдет, вы можете переместить этот файл, закрыть и открыть vim и посмотреть, решит ли он вашу проблему.
Отключение настроек отступа для TeX
Возможно, настройки по умолчанию просто не делают этого для вас, и вы хотите отключить настройки отступа для TeX, но оставить все остальные типы файлов в покое. Это легко сделать, установив для этих значений значения по умолчанию в файле в каталоге after
.
Я мало что знаю о Tex или LaTex, но когда я создал файл с расширением .tex
и запустил :filetype
, он имел тип файла plaintex
.Предполагая, что это правильно, вы хотите создать файл ~/.vim/after/indent/plaintex.vim
.В этом файле:
set autoindent&
set cindent&
set smartindent&
set indentexpr&
При этом все эти значения будут установлены в значения по умолчанию при каждом открытии файла .tex
.