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

Отключить все автоматические отступы в vim

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

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

где пробел infront x - это одна вкладка.

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

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

Это очень неприятно, как его отключить?

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

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

Ответ 1

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

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

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

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

Ответ 2

Я просто провел несколько часов, работая с углублениями с 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 и С++, отступы на основе типа автоматически устанавливают "cindent" , и по этой причине нет необходимости устанавливать "cindent" вручную для таких файлов. В этих случаях все еще применяются опции 'cinwords', 'cinkeys' и 'cinoptions'.

Как правило, "smartindent" или "cindent" следует устанавливать только вручную, если вас не устраивает работа с отступом на основе типа файла.

indentexpr

Запускает скрипты отступа типа файла, найденные в (vimfolder)\indent\\(indentscripts). Он упоминается в документации vim для типа файла, а также только что упомянутых других (также это было причиной проблемы, с которой я столкнулся):

Reset '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 будут установлены все эти значения по умолчанию.

Ответ 3

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

Ответ 4

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

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

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