2

Я знаю, что этот вопрос задавался много раз, но я не нахожу решение своей проблемы, в частности, потому что я даже не могу точно определить проблему.

Вот график событий:

  • открыть старый файл python (написано с python2.7) - все хорошо
  • измените привязки клавиш для выполнения файлов .py с python3 вместо python2.7 - как и ожидалось, много IndentError s, но файл остается той же структурой / разметкой / количеством пробелов / табуляции
  • добавлен expandtab к моему .vimrc - больше нет IndentError для несогласованности, но новый IndentError повсюду, потому что структура моего исходного кода теперь совершенно не в порядке.
  • Я expandtab из моего .vimrc и все равно получаю то же самое из исходного кода, даже если я убиваю сессию, довольно iTerm, вытаскиваю исходный код из github ...ЗАЧЕМ!?

Просто чтобы прояснить, есть только две вещи, которые были изменены в моем vimrc за последние несколько месяцев, и обе изменения были сделаны сегодня утром. Первым было переназначение <F9> для выдачи команды оболочки для python3 вместо 2.7, которая НЕ СЛЕДУЕТ влиять на структуру моего исходного кода. Вторым изменением было добавление expandtab которое все испортило ... удаление expandtab не возвращает мой опыт vim к тому, что был до его добавления.

Структурные изменения в моем источнике являются полуоднородными, поэтому позвольте мне попытаться объяснить, что на самом деле происходит.

Как раньше выглядело:

class GUI():
    def __init__(self):
        suite of code

теперь выглядит так:

class GUI():
    def __init__(self):
    suite of code

и так по всем направлениям для того, что похоже на все вложенные наборы кода ... другими словами, первое расширение вкладок на 4 пробела работает нормально, но вместо расширения вкладок, вложенных дальше в первую вкладку, это выглядит так вместо этого просто удаляет вкладку.

Происходят и другие странные вещи, но я не могу видеть шаблон.

Есть идеи, что происходит?

1 ответ1

4

Это появление, когда каждый второй уровень отступа понижается, обычно (и, кажется, имеет место в вашем коде) признаком просмотра кода, который имеет 4 пробела на отступ, но вкладки с 8 пробелами на каждой другой строке (например, 4s, 1t, 1t4s, 2t), с настройкой tabstop 4.

Для кода Python вы должны просто заменить все вкладки в коде на восемь пробелов, так как интерпретатор обрабатывал это так. В общем случае вы можете справиться с подобными ситуациями, используя команду :retab после установки значения tabstop значению, с которым исходный код был изначально написан, например:

:set ts=8
:retab 4

Если expandtab установлено, retab заменит вкладки с пробелами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .