Перейти к содержимому

Vim: изменение табуляции на пробелы

2

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

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

  • открыть старый файл python (написано с python2.7) - все хорошо
  • измените привязки клавиш для выполнения файлов .py с python3 вместо python2.7 - как и ожидалось, много IndentErrors, но файл по-прежнему такой же структуры / макета / количества пробелов / табуляций
  • добавлен 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 пробела работает нормально, но вместо расширения вкладок, вложенных дальше в первую вкладку, это выглядит так вместо этого просто удаляет вкладку.

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

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

569 просмотров
aweeeezy спросил 11 лет назад
A 156

1 ответ

4
Принятый ответ

This appearance, with every other indent level dropped, is usually (and seems to be the case in your code) a symptom of looking at code which has 4 spaces per indent, but 8-space tabs tabs on every other line (e.g. 4s, 1t, 1t4s, 2t), with a tabstop setting of 4.

For Python code, you should simply replace all tabs in the code with eight spaces, since that was how the interpreter was treating it. In general you could deal with situations like this by using the :retab command after setting tabstop to the value the source code was originally written with, so e.g.

:set ts=8 :retab 4 

If expandtab is set, retab will replace tabs with spaces.

Отлично! Перед вашим редактированием я попробовал : set tabstop = 8, а затем: retab! , И это поработало. Теперь перейдем к следующему вопросу о попытке объединить мои пакеты из моей старой версии python в новую: / Я должен был давно прислушаться к совету «всегда устанавливать с виртуальным env». Я до сих пор не понимаю, как это работает.

aweeeezy · 11 лет назад · 0
Random832 ответил 11 лет назад
R 581