Какой параметр в vim противодействует отказу smartindent делать отступы # comments в сценариях оболочки?
-
23-08-2019 - |
Вопрос
Недавно я начал использовать vim 7 (ранее vim 6) и smartindent
настройка.По большей части это работает хорошо, хотя я так привык вводить табуляцию после открытой фигурной скобки, что это почти контрпродуктивно.
Однако есть один пример маниакального поведения.При редактировании сценария оболочки я пытаюсь создать комментарий с текущим уровнем отступа, но smartindent
не будет иметь к этому никакого отношения.Он настаивает на том, что комментарий должен быть на уровне 0 (без отступа).Что еще хуже, это нарушает сдвиг вправо ('>>
' и друзья), чтобы они не работали.Это прямое неподчинение, и я хотел бы знать, каков наилучший способ это исправить?
(Я тоже не в восторге от smartindent
идеи о создании отступов then
после if
.)
Предпочтительные решения избавят меня от рукоприкладства - я ленив.Одним из вариантов было бы "выключить smartindent
при редактировании сценариев оболочки (оставьте это включенным для остальных)'.Другим вариантом были бы рекомендации о том, как найти управляющий скрипт для smartindent
и что редактировать, чтобы изменить характеристики, которые мне не нравятся.Последний вариант (мне не нужны советы о том, как это сделать - просто намек на то, что это лучший или единственный способ восстановить рассудок) - уйти smartindent
сброшен.
Я видел смутно связанный вопрос о "(PHP и) раздражающие неиндентированные правила vim";это не дает мне прямого ответа, хотя, возможно, cindent
и связанные с этим пункты, упомянутые там, на самом деле являются частью ответа.
Решение
Найдите файл отступа, (например/usr/ поделиться/vim / vim71 / отступ / sh.vim в моей системе)
Эта строка выглядит как проблема:
setlocal indentkeys-=:,0#
Возможно, вы сможете исправить это в своем .vimrc или загрузить пользовательский файл отступа вручную.
Редактировать:Это выглядит сложнее, чем я думал, но, возможно, в файле отступов есть что-то специально заданное, что вам нужно было бы исправить.
2 - е редактирование:Похоже, я был совершенно неправ, Зацените:
Восстановление отступа после ввода хэша
или
как-настроить-vim-на-то, чтобы-не-помещать-комментарии-в-начале-строк-во-время-редактирования
Другие советы
Что ж, после изучения некоторых вариантов, включая использование ':set cindent
" вместо ":set smartindent
', В итоге я вернулся к простому использованию ':set autoindent
'.Вероятно, есть способы заставить этот материал работать именно так, как я хочу, но это достаточно грязно и неудобно, так что я не могу беспокоиться.Я прекрасно работал с autoindent
за предыдущие 20 с лишним лет, а также выгоды от дополнительных наворотов, предоставляемых smartindent
перевешиваются тем, что я расцениваю как его неправильное поведение.
Спасибо тебе, Хуан, за твою помощь.Хотите верьте, хотите нет, но это действительно помогло - довольно сильно.
Однако, продолжая работу над этим, я также обнаружил пару других аккуратных команд:
>i}
>a}
Эти кнопки сдвигают вправо блок кода, в котором вы находитесь.Тот самый 'i
' версия делает отступы в теле, а не в закрывающих фигурных скобках (мой предпочтительный стиль), и 'a
' версия делает отступы в закрывающих фигурных скобках до (версии, которая требуется на работе).
Кроме того, вы можете применить квалификаторы к '%
' в командах , выполняемых в оболочке:
:make %:r.o
Это запустило бы make в 'root' текущего имени файла (это '%:r
') за которым следует '.o
'.Или, другими словами, если я редактирую somefile.c
, это выполняет make somefile.o
.
Добавьте строку ниже в свой файл .vimrc
отступ типа файла на
(это установит правильный режим отступа в зависимости от типа файла)
У меня была такая же проблема долгое время, пока я не понял, что autoindent и smartindent оба не нужны, если в вашем vimrc установлен параметр "тип файла indent on" - 'тип файла indent on' использует файл indent / sh.vim (или на любом другом языке) в вашем каталоге vim для определения правил отступов, и autoindent и smartindent оба могут вмешиваться в это.
Я не тестировал это с помощью sh, но perl внезапно начал вести себя должным образом, когда я переключился.
Боковое Примечание:Перенаправление Хуана "Восстановление отступа после ввода хэша" не является хорошим решением - хотя оно и устраняет проблему в одной ситуации (ввод кода), это не меняет того, как редактор думает об этом следует должен иметь отступ, поэтому повторный отступ (визуальный = или обычный ==) переместит его обратно влево.
У меня есть следующие строки в моем .vimrc, и я не вижу проблемы.
set smartindent
inoremap # X^H#
Раньше у меня было установить автоматическое обозначение после этих двух строк, но кажется, что это не имеет никакого эффекта.
Да, это так очень раздражает.smartindent действительно предназначен только для C-подобных языков.Посмотрите, как я включаю соответствующий отступ в зависимости от языка на:http://www.pixelbeat.org/settings/.vimrc
Предыдущий ответ, предполагающий:
:инокарта # X^H#
это превосходно.Это ответ, предложенный документацией VIM по адресу ":help smartindent".Обратите внимание, что ^H вводится с помощью CTRL-V CTRL-H.Соответствующий раздел из документации приведен ниже.
When typing '#' as the first character in a new line, the indent for
that line is removed, the '#' is put in the first column. The indent
is restored for the next line. If you don't want this, use this
mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
When using the ">>" command, lines starting with '#' are not shifted
right.