Автоматический отступ Vim прекращает отступ многострочного массива в bash после 20 строк

Я столкнулся с такой же проблемой на ноутбуке HP с Fedora. В моем случае я обнаружил, что могу свести к минимуму вероятность того, что ноутбук снова включится, отключив адаптер переменного тока за несколько минут или секунд до его выключения (, чтобы в момент отключения питания он работал от батарей ).

1
03.08.2019, 02:52
1 ответ

Оператор={motion}может быть определен рядом настроек ('equalprg', 'indentexpr', 'lisp'), но когда все они не установлены, он возвращается к использованию отступа C . Вот что здесь происходит.

Отступ C предназначен для языка C и в основном основан на фигурных скобках C {... }и идентификаторах, таких как if, else, whileи т. д.

Оказывается, многое из этого хорошо знакомо bash (и многим другим языкам ), поэтому в большинстве случаев это работает хорошо.

Однако в C круглые скобки используются для заключения логических выражений, в присваиваниях переменных или операторах ifили while. Vim хочет отформатировать эти (, чтобы отслеживать наборы совпадающих парных скобок ), но хочет наложить некоторые ограничения на то, насколько глубоко они выглядят.

Так как в C скобки используются в выражениях, и они обычно короткие, ограничение по умолчанию для их отслеживания составляет 20 строк.

[ 'cinoptions'] может управлять большим количеством отступов C, и оказывается, что у него есть возможность управлять только этим. Опцию)Nможно использовать для настройки ограничения строки для выражений в скобках.

Например, увеличить его до 100 строк:

:set cinoptions=)100

(Или, чтобы уменьшить его до 10, используйте :set cinoptions=)10.)

Это может объяснить, что происходит, и, возможно, это быстрый хак, который можно превратить в полезный обходной путь... Но правильным решением здесь будет установка'indentexpr'в соответствии с языком, на котором вы пишете. (Помните, что отступ C срабатывает только тогда, когда 'indentexpr'не установлен.)

Vim фактически поставляет подключаемый модуль -для создания отступов в сценариях оболочки, возможно, вы просто не включили его. Убедитесь, что эта команда есть в вашем.vimrc:

filetype indent on

Затем убедитесь, что ваш сценарий оболочки распознается как типsh:

:set filetype?
filetype=sh

Если это не так,установите его (, возможно, вам придется разобраться, почему этого не происходит):

:setf sh

Вы можете дважды проверить, что 'indentexpr'установлено:

:set indentexpr?
indentexpr=GetShIndent()

С этими настройками =будет работать так, как вы ожидаете, в сценарии оболочки.

1
27.01.2020, 23:41

Теги

Похожие вопросы