Отключить все авто отступы в vim - PullRequest
19 голосов
/ 14 августа 2011

В TeX vim обычно портит мой отступ. В основном, когда я нахожусь в отображаемом уравнении, которое, я думаю, должно выглядеть следующим образом:

\[
    x=\frac{y}{z}  
\]

, где пробел перед x - одна вкладка.

Когда я начинаю вводить уравнение, я сначала набираю метки \[ и \], а затем возвращаюсь между ними, набираю вкладку, а затем остальную часть уравнения.

Vim не делает ничего плохого, пока мне не придется использовать что-то, содержащее фигурные скобки (например, \frac{}). Когда я набираю закрывающий }, vim автоматически сдвигает отступ для всей строки влево, что отменяет мою напечатанную вкладку.

Это очень раздражает, как его отключить?

my .vimrc содержит:

"indentation
set smartindent
set autoindent
set tabstop=5
set shiftwidth=5
filetype indent on

Ответы [ 4 ]

24 голосов
/ 07 сентября 2013

Я только что провел несколько часов, работая над болью в отступах с помощью javascript, и пришел к выводу, что не удаляйте filetype indent on из вашего vimrc!

Этот параметр обеспечивает наилучшие интеллектуальные отступы для файлов нескольких типов. Если вы получаете плохие результаты, вероятно, есть проблема с настройкой.

Настройки отступа для файла

Так что, если вы похожи на меня, вы, вероятно, имели filetype indent on в вашем vimrc и не знали, что он делает.

Все, что делает этот параметр, - говорят vim искать файлы с правилами отступа, специфичными для типа файла. Есть несколько мест, где он выглядит, но, вероятно, вас заинтересуют только два.

  1. $VIMRUNTIME/indent/
  2. ~/.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.

18 голосов
/ 14 августа 2011

Кажется, в вашем вопросе есть небольшая смесь терминов.В vim термин autoindent указывает на особый вид отступа, который просто следует за уровнем отступа предыдущей строки (что иногда довольно удобно).Чтобы удалить его set noautoindent вручную или записать в свой _vimrc.

Существует два других автоматических вида отступов: cindent и smartindent.Точно так же, если вы хотите отключить их, перейдите с set nocindent и set nosmartindent

Если вы посмотрите в справке (help autoindent, ...), все они довольно хорошо объяснены.Какой из них вы предпочитаете (или нет), в основном определяется вашим стилем программирования и привычками.Так что попробуйте их и посмотрите, что вам больше всего нравится.

К сожалению, я больше не использую LaTeX, поэтому я не знаком с его внутренними правилами отступа для типов файлов.

2 голосов
/ 11 августа 2016

Для всех, кто сталкивался с подобной проблемой, решение, которое работало для меня, было:

  1. Используйте :verbose set indentexpr?, чтобы найти файл, вызывающий де-отступ
  2. Найти гдеindentexpr изменено (для меня это было setlocal indentexpr=GetTeXIndent())
  3. Измените эту строку на setlocal indentexpr&, чтобы отключить indentexpr

Это убрало все отступы из скобок, скобки и фигурные скобки.

2 голосов
/ 14 августа 2011

Удалите строки set autoindent и set smartindent, чтобы удалить все vim автоиндентирования.

...