Какой параметр в vim противодействует отказу smartindent делать отступы # comments в сценариях оболочки?

StackOverflow https://stackoverflow.com/questions/385327

  •  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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top