С одной стороны, я сторонник табуляций, их ширину в редакторе всегда легко изменить, не трогая кода. С другой — Style Guide for Python Code рекомендует делать отбивку четырьмя пробелами. В новых программах я стал использовать четыре пробела, в старых использую табуляции.
Проблемы начинаются при попытке вставить чужой код в свой проект. С высокой степенью вероятности, он или использует другой способ ввода отступов, или другую ширину отступа.Лирическое отступление
В целом, в Vim набирать код Python удобно: поддерживается как режим с табуляциями, так и режим с пробелами. В последнем случае нужно установить опциюexpandtab
. Автоматические отступы для Python поддерживаются.
Часто пригождается: чтобы сдвинуть блок текста влево или вправо:Shift-V
, выделение блока,<<
или>>
соответственно.
Задать желаемую ширину табуляции и ширину сдвига можно опциямиtabstop
иshiftwidth
соответственно, например:Настройки файла можно прописать в его:set ts=4 sw=4
modeline
.
Собственно, проблемы здесь две. Первая неспецифична для пайтона, а проявляется всегда при вставке в Vim, запущенный в терминале. Vim попытается автоматически отбить вставляемый код ещё раз. Решение я уже описывал.
:set paste
.Вторая проблема специфична для пайтона. Даже если код был вставлен правильно (с сохранением авторских отступов), но авторские отступы не совпадают с используемыми в программе, код либо не будет работать вообще, либо будет работать неправильно. Выравнивать код с помощью
<<
и >>
далеко не всегда удобно.Выход здесь довольно прост:
- (опционально) временно отключить
expandtab
, если используется; - преобразовать авторские пробелы в табуляции, для этого выделяем нужный блок и делаем
:retab!5
, где аргумент («5») — авторская ширина отступа; - (опционально) при использовании
expandtab
, включить его обратно, а «авторские» табуляции заменить на нужное число пробелов (:s#\t# #g
).
P.S. Как легко заметить, пайтон не поощряет повторное использование в стиле copy-paste ;-)