У меня есть некоторый код на Python с непоследовательным отступом. В нем много сочетаний табуляции и пробелов, что усугубляет проблему, и даже отступы на пробелах не сохраняются.
Код работает так, как ожидалось, но его сложно поддерживать.
Как я могу исправить отступ (например, HTML Tidy, но для Python), не нарушая код?
Используйте reindent.py скрипт, который вы найдете в Tools/scripts/ каталоге вашей установки Python:
Измените файлы Python (.py) на использование отступов в 4 пробела и отсутствие жестких символов табуляции. Также обрежьте лишние пробелы и табуляции с концов строк и удалите пустые строки в конце файлов. Также убедитесь, что последняя строка заканчивается символом перевода строки.
Взгляните на этот скрипт для получения подробных инструкций по использованию.
ПРИМЕЧАНИЕ: Если в вашем дистрибутиве Linux по умолчанию не установлен reindent с Python:
Во многих дистрибутивах Linux не reindent установлено по умолчанию с помощью python --> один простой способ получить reindent это сделать pip install reindent.
p.s. Альтернативой pip является использование вашего менеджера пакетов дистрибутивов (т.Е. apt-get, yum, dnf), но тогда вам нужно выяснить, в каком пакете есть инструмент командной строки, потому что каждый дистрибутив имеет инструмент в другом пакете.
$ # see what changes it would make $ autopep8 path/to/file.py --select=E101,E121 --diff
$ # make these changes $ autopep8 path/to/file.py --select=E101,E121 --in-place
Примечание: E101 и E121 имеют отступ pep8 (я думаю, вы можете просто передать--select=E1, чтобы исправить все проблемы, связанные с отступом, - те, которые начинаются с E1).
Вы можете применить это ко всему вашему проекту, используя recursive flag:
*:ret * *: retab* :[диапазон] ret[ab][!] [new_tabstop] Замените все последовательности пробелов, содержащие <Tab> с новыми строками пробелов, используя новое значение tabstop. указано значение tabstop. Если вы не укажете новый размер tabstop или он равен нулю, Vim использует текущее значение 'tabstop'. Текущее значение 'остановка табуляции-это всегда расчет ширины существующих вкладок. С !, ВИМ также заменяет строки только нормальные места с закладками, где это уместно. При включении 'expandtab' Vim заменяет все табуляции на соответствующее количество пробелов. Эта команда устанавливает 'tabstop' в новое заданное значение, и если она выполняется для всего файла, что используется по умолчанию, не должно вносить никаких видимых изменений. Осторожно: эта команда изменяет любые символы <Tab> внутри строк в программе на C. Используйте "\t", чтобы избежать этого (в любом случае, это хорошая привычка). ":retab!" также может изменять последовательность пробелов на символы <Tab>, что может испортить printf(). {не в Vi} Недоступно, если функция |+ex_extra| была отключена во время компиляции .
Например, если вы просто наберете
:ret
все ваши вкладки будут расширены до пробелов.
Возможно, вы захотите
:se et " сокращение для :set expandtab
чтобы убедиться, что в любых новых строках не будут использоваться буквенные табуляции.
заменит табуляцию пробелами, предполагая, что табуляция останавливается через каждые 8 символов, в file.py (с оригиналом, идущим на file.py.bak, на всякий случай). Замените 8 на 4, если ваши табуляции расположены через каждые 4 пробела.
autopep8автоматически форматирует код Python в соответствии с PEP 8 nullstyle руководством. Он использует pep8 утилиту для определения, какие части nullcode необходимо отформатировать. autopep8 способен исправить большинство nullformatting проблем, о которых может сообщить pep8.