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

недавно я начал использовать vim 7 (ранее vim 6) и smartindent настройка. По большей части он работает хорошо, хотя я так привык печатать вкладку после открытой скобки, что это почти контрпродуктивно.

тем не менее, есть одна часть маниакального поведения. При редактировании сценария оболочки я пытаюсь создать комментарий на текущем уровне отступа, но smartindent не будет иметь к этому никакого отношения. Он настаивает на том, что комментарий должен быть на уровне 0 (без отступа). Что еще хуже, это разрывы сдвиг вправо ('>> ' и друзья), чтобы они не работали. Это прямое неповиновение, и я хотел бы знать, как это лучше всего исправить?

(я также не увлекаюсь smartindentидеи о отступах then после if.)

предпочтительные решения спасут меня от ручного избиения - я ленив. Одним из вариантов было бы " выключить smartindent при редактировании скриптов оболочки (оставьте его включенным для остальных)'. Другим вариантом могли бы стать руководящие принципы по поиску скрипт управления для smartindent и что редактировать, чтобы изменить характеристики, которые мне не нравятся. Последний вариант (который мне не нужен совет о том, как это сделать - просто намек на то, что это лучший или единственный способ восстановить здравомыслие) - оставить smartindent unset.

Я видел смутно связанный вопрос на "(PHP и) раздражающие правила Vim unindent"; оно не дает мне прямого ответа, хотя, возможно,cindent и связанные с этим пункты, упомянутые там, на самом деле являются частью ответ.

7 ответов


найдите файл отступа (например, /usr/share/vim/vim71/indent / sh.vim в моей системе)

эта строка выглядит проблема:

setlocal indentkeys-=:,0#

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

edit: это выглядит сложнее, чем я думал, но, возможно, в файле отступов есть что-то конкретное, что вам нужно будет исправить.

2nd edit: похоже, я был совершенно неправ, Проверьте out:

Восстановление отступа после ввода хэша

или

howto-configure-vim-to-not-put-comments-at-the-beginning-of-lines-while-editing


Ну, после изучения некоторых вариантов, в том числе с помощью ':set cindent "вместо":set smartindent', Я закончил тем, что вернулся к использованию':set autoindent'. Вероятно, есть способы заставить все это работать именно так, как я хочу, но это достаточно грязно и достаточно сложно, чтобы я не беспокоился. Я отлично поработал с autoindent за предыдущие 20 с лишним лет, и польза от лишних наворотов, предусмотренных smartindent перевешивают то, что я считаю своим проступок.


добавьте строку ниже в свой .vimrc

тип файла отступ на

(он установит правильный режим отступа в зависимости от типа файла)


У меня была эта же проблема в течение длительного времени, пока я не понял, что autoindent и smartindent оба ненужны, если "отступ типа файла on" установлен в вашем vimrc - "отступ типа файла on" использует отступ/sh.Vim (или любой другой язык) файл в каталоге vim, чтобы выяснить правила отступов, и autoindent и smartindent оба могут вмешиваться в него.

Я не тестировал это с sh, но perl внезапно начал вести себя правильно, когда я переключился.

Sidenote: Хуана редирект, "восстановление отступа после ввода хэша", не является хорошим решением - хотя он исправляет проблему в одной ситуации (ввод кода), это не меняет того, как редактор думает об этом должны быть отступом, поэтому повторный отступ (visual = или normal ==) будет толкать его назад влево.


У меня есть следующие строки в моей .vimrc и я не столкнулись с этой проблемой.

set smartindent
inoremap # X^H#

Я набор автоотступа после этих двух строк, но кажется, что это не имеет никакого эффекта.


Да, это очень раздражает. smartindent действительно только для C подобных языков. См. Как включить соответствующий отступ на основе языка в: http://www.pixelbeat.org/settings/.vimrc


предыдущий ответ, предполагая, что:

: inoremap # 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.