Какой параметр в 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.