Переформатировать файл Python, чтобы иметь 4 отступа - PullRequest
22 голосов
/ 07 марта 2011

Я редактирую файл Python, который использует два пробела для программных отступов - я предпочитаю 4 пробела.В моем .vimrc у меня есть следующие настройки, связанные с отступом:

set tabstop=4                     "Indentation levels every four columns
set expandtab                     "Convert all tabs typed to spaces
set shiftwidth=4                  "Indent/outdent by four columns
set softtabstop=4

Как мне заставить Vim преобразовать все существующие 2 отступа в 4 отступа?

Другими словами:

if something:
  dothis()

становится

if something:
    dothis()

Когда я пытался gg = G

def check():
  for a in list:
    for  b in list2:
      check(a, b)
      while (len > MAX) :
        poll()

  while(len(thelist) > 0) :
    poll()  

  return results

стал

def check():
    for a in list:
    for  b in list2:
    check(a, b)
    while (len > MAX) : 
        poll()

        while(len(thelist) > 0) :
            poll()

            return results

Ответы [ 7 ]

49 голосов
/ 07 марта 2011

Чтобы удвоить количество пробелов в начале каждой строки (и только в начале):

:%s/^\s*/&&/g

& в шаблоне замены соответствует шаблон.

Вероятно, у вас не будет побочных эффектов.

18 голосов
/ 07 марта 2011

Нажатие gg=G - это команда для повторного отступа всего в файле. Если у вас есть другие элементы, которые можно переопределить, vim также сделает отступ, что не всегда дает желаемый эффект. Вам придется убирать их вручную, если они безобразны.

В качестве альтернативы, вы можете использовать команду > для отступа, с диапазонами, чтобы несколько эффективнее вручную просматривать файл Например, 99>k сделает отступ на 99 строк ниже курсора на один уровень.

3 голосов
/ 22 января 2013

Я нашел скрипт повторного отступления http://pypi.python.org/pypi/Reindent/0.1.0 хорошо работает для меня. Не чистый vim, но действительно легкий!

После его установки вы можете использовать его в vim с

:%! reindent

(т. Е. Передать весь буфер через программу Redent) и все готово.

Из командной строки его можно использовать для повторного создания нескольких файлов (например, всех файлов в каталоге или даже рекурсивно в дереве каталогов).

2 голосов
/ 07 марта 2011

попробуйте следующую команду подстановки:

:%s/  /    /g

(Чтобы уточнить: между первым и вторым '/' и двумя вторыми и третьими '/' есть два пробела.* Одной полезной командой при работе с проблемами пробелов является также команда set list, которая визуально покажет все пробелы.Используйте set nolist для сброса.

1 голос
/ 01 декабря 2014

Лучший способ переформатировать Python, исправить многие другие проблемы и сделать его совместимым с PEP8 - это использовать autopep8 .Смотрите этот связанный вопрос .Поэтому после того, как вы установили autopep8 (например, pip install autopep8) в vim, вы делаете:

:%! autopep8 -

Также есть плагин vim-autopep8 , чтобы сделать вещи еще проще.

0 голосов
/ 14 июня 2015

Плагин vim vim-autoformat автоматически интегрирует форматер autopep8 в vim, если он установлен.Вы можете отформатировать весь файл или выбранную визуально часть одним нажатием клавиши.

Что более важно, vim-autoformat учитывает соответствующие настройки вашего .vimrc, например, если у вас

set shiftwidth=4

в вашем .vimrc, эта информация будет передана autopep8.

0 голосов
/ 07 марта 2011

Вы пробовали?

: retab

Я сейчас не перед машиной с Vim, поэтому не могу это проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...